{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "38d84418",
   "metadata": {},
   "source": [
    "# Assigning Geometric Properties\n",
    "\n",
    "Geometric properties refer to the physical sizes of the pores and throats, such as pore diameter and throat lengths. The values are essential to the pore network modeling enterprize since they control all the transport and percolation behavior of the network. Unlike phase properties which can be normalized for, geometric properties define the network even more than topological properties like connectivity. \n",
    "\n",
    "Geometric properties *can* be calculated by various means, ranging from assigning random values to pores, to extracting values from tomographic images. OpenPNM provides a library of functions, or 'pore-scale models' which can calculate these geometric properties automatically. This tutorial will cover the following subjects:\n",
    "\n",
    "- Manually Calculating Pore and Throat Properties (⚠ Not Recommended!) \n",
    "- Using Pore-scale Models from the Library \n",
    "- Overview of the Dependency Handler \n",
    "- Using Predefined Collections of Models \n",
    "- Defining Heterogeneous Domains (by Applying Models to Specific Locations) \n",
    "- Customizing Models (by Overwriting Them or Their Arguments) \n",
    "- Writing and Using Custom Models "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "94917bac",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import openpnm as op\n",
    "import scipy.stats as spst\n",
    "op.visualization.set_mpl_style()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f63bbaee",
   "metadata": {},
   "source": [
    "Let's start by creating a blank Cubic network.  As we can see by printing it, there are only coordinates, connections, and some labels, but no geometric properties:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "142050f5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "══════════════════════════════════════════════════════════════════════════════\n",
      "net : <openpnm.network.Cubic at 0x1128391d0>\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n",
      "  #  Properties                                                   Valid Values\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n",
      "  2  pore.coords                                                   8000 / 8000\n",
      "  3  throat.conns                                                22800 / 22800\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n",
      "  #  Labels                                                 Assigned Locations\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n",
      "  2  pore.xmin                                                             400\n",
      "  3  pore.xmax                                                             400\n",
      "  4  pore.ymin                                                             400\n",
      "  5  pore.ymax                                                             400\n",
      "  6  pore.zmin                                                             400\n",
      "  7  pore.zmax                                                             400\n",
      "  8  pore.surface                                                         2168\n",
      "  9  throat.surface                                                       4332\n",
      " 10  pore.left                                                             400\n",
      " 11  pore.right                                                            400\n",
      " 12  pore.front                                                            400\n",
      " 13  pore.back                                                             400\n",
      " 14  pore.bottom                                                           400\n",
      " 15  pore.top                                                              400\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "pn = op.network.Cubic([20, 20, 20], spacing=5e-5)\n",
    "print(pn)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d7e40b76",
   "metadata": {},
   "source": [
    "```{attention} **Changed in V3**\n",
    "\n",
    "  In OpenPNM V3 we have removed the concept of ``Geometry`` and ``Physics`` objects, in favor of placing all the properties on the ``Network`` and ``Phase`` objects instead. \n",
    "  \n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "35629fd2",
   "metadata": {},
   "source": [
    "To add geometrical properties to a network, we have a few different options.  Each will be explored below:"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "51da4915",
   "metadata": {},
   "source": [
    "## Manually Calculating Properties\n",
    "\n",
    "```{warning} **Manual Calculation is Not Recommended**\n",
    "\n",
    "  This is *not* the preferred way to do things, but does illustrate the processes very well. The preferred way is using pore-scale models, which allow for the automatic regeneration of dependent properties  when something changes. \n",
    "  \n",
    "```\n",
    "\n",
    "Let's start by adding pore and throat size distributions.  There are a few different ways to do this, and we'll explore each one to be thorough.  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f7ad8f43",
   "metadata": {},
   "source": [
    "### Adding pore and throat sizes from `scipy.stats` distributions\n",
    "\n",
    "Scipy's `stats` module has a *lot* of statistical distributions defined.  Let's generate pore and throat sizes using some of these.  First, let's use a normal distribution to generate pore sizes within the range ~1 to 50 um:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "7f638068",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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tn///vDaa6+l8BgNHz48XHTRRan1b8qUKTV9OgAApd1tGlvTYnA7UUePHg179+6t9nxsZTty5Ei48cYbi8dii9sNN9yQWtpWrVpVPP7UU0+FcePGFYNbNGbMmDBgwICwcOHCmj4VAIDs1OmEhQMHDoQOHTqkbs44Pi22rsWuzmOtW7cutGvXLgwcOPC447FFrfx8eQvdjh07wtChQyv9O7FsebnqxNbC3r17V/mYO3duLTxbAOBUNXfu3GpzRswgDdptWpPu1TvuuCNccMEFaULCkiVLwkMPPRTeeOONNE4udqlG8QmdccYZqbWt4vdHW7duLZY79njFsh9++GE4fPhwahmsSryHGACr8mktgwAAnyVmiepyRm2rs/D2t3/7t8d9HScexO7NODnhySefLE5EOHjwYJWBK846LT9/7MfPKltdeGvatGmVwS+KrYMAACcrZolevXpVeS42QMVGpEYf3qpyyy23hJ/85CfhhRdeKIa3Nm3apBazig4dOlQ8f+zHEylblRjc4hg6AIDaNn369PSoSuw6rc1WuXpdpDeGqy5duqQuzmND1fbt20OhUDiubHk3ac+ePYvljj1esWwcU1ddqxsAQKmo1/D28ccfp3XiunXrVjw2ZMiQNLEhLr57rNWrVxfPR7EpMn5fXJ6korjGW3k5AIBSVifhLXZjxqBW0d/8zd+kFra4Q0K58ePHhxYtWqTJDOVimYcffjgFthEjRhSPT5gwISxevDhs2rSpeGz58uVh48aNaT04AIBSd1Jj3uJiuh999FFxJujzzz9fHE920003hT/84Q/h/PPPD9/97neL22EtXbo0/PrXv07BLQa2Y/uBp02bFmbNmpXWe4uL/j7zzDNh5cqV4fHHHy8u0BvNnDkzLFq0KIwePTrcfPPNadmR+H3nnntumDx58ud9LQAASjO8xS2p3nvvveLXTz/9dHpEcUeF0047LS2mu2zZsvDoo4+mhXr79euXdki47bbb0szPY8WtsTp16hTmzZuXdkro379/WLBgQdoi61h9+vQJL730UhoQeOedd6btsC677LK0Q4PxbgDAqeCkwtu77777mWUee+yxE75eDHMzZsxIj88yaNCg1IoHAHAqqtcJCwAAfD7CGwBARoQ3AICMCG8AABkR3gAAMiK8AQBkRHgDAMiI8AYAkBHhDQAgI8IbAEBGhDcAgIwI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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "psd = spst.norm.rvs(loc=25, scale=6, size=pn.Np)\n",
    "plt.hist(psd, edgecolor='k')\n",
    "plt.xlim([0, 50]);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "da11cebf",
   "metadata": {},
   "source": [
    "The above distribution looks good, let's just make absolutely sure that our distribution is not so wide that it has negative numbers or values greater than 50 um:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "8efcd33a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.5593961722893255\n",
      "47.80996128980269\n"
     ]
    }
   ],
   "source": [
    "print(psd.min())\n",
    "print(psd.max())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "59b3a0eb",
   "metadata": {},
   "source": [
    "Now we'll convert these values to SI and assign to the network:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "98c6c031",
   "metadata": {},
   "outputs": [],
   "source": [
    "pn['pore.diameter'] = psd*1e-6  # um to m"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d3e52c17",
   "metadata": {},
   "source": [
    "Next we need to define throat diameters. We can do this in the same way, but let's use a different distribution.  Note that this approach is not recommended because as we'll see it results in throats that are larger than the two pores they are connected two.  We'll fix this in the following section:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "3dd8c095",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "tsd = spst.weibull_min.rvs(c=1.5, loc=.5, scale=7.5, size=pn.Nt)\n",
    "plt.hist(tsd, edgecolor='k')\n",
    "plt.xlim([0, 50]);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60cc7cb1",
   "metadata": {},
   "source": [
    "Again, let's inspect the high and low values:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "6dee2380",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.5130345457395142\n",
      "36.96861960231873\n"
     ]
    }
   ],
   "source": [
    "print(tsd.min())\n",
    "print(tsd.max())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9fb4889c",
   "metadata": {},
   "source": [
    "So we can see that we have throats as small as 500 nm, and as large as 37 um.  These can be assigned to the network as well:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "e1cf0757",
   "metadata": {},
   "outputs": [],
   "source": [
    "pn['throat.diameter'] = tsd*1e-6  # um to m"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73a09aab",
   "metadata": {},
   "source": [
    "The problem with this approach is that both pore and throat sizes were just assigned to random locations, rather than putting small throats between small pores and vice-versa. When throats are larger than the pores they connect it can cause problems or strangeness in the results since we generally assume a throat is a constriction between two pores.  Let's count how many are problematic."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a6e0cbbd",
   "metadata": {},
   "outputs": [],
   "source": [
    "hits = np.any(pn['pore.diameter'][pn.conns].T < pn['throat.diameter'], axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "b27b6342",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.int64(564)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hits.sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f403af58",
   "metadata": {},
   "source": [
    "```{tip}\n",
    "\n",
    " **Indexing pore properties by conns:** Using the `conns` array to index into a pore property returns an Nt-by-2 array with the properties of the pores on the end of a throat in each column.  For instance, see the diameter of the pore on each end of a throat, use `pn['pore.diameter'][pn.conns]`.  This approach is very powerful.  If you ever feel tempted to use a for-loop to scan over each pore, then inspect the properties of the neighboring throats, consider instead if you can \"loop\" over the throats then interrogate  each pore.  If yes, then you can use this conns-indexing trick.\n",
    "    \n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0eb07950",
   "metadata": {},
   "source": [
    "There are two *safer* ways to assign pore and throat sizes, to ensure that throats are smaller than the pores they connected.  The first is to proceed as above by assigning pore sizes randomly, *then* assigning throats to be the *as small (or smaller) as the smallest pore it is connected to*.  This can be done using some `numpy` functions as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "369bc582",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "tsd = np.amin(pn['pore.diameter'][pn.conns], axis=1)\n",
    "plt.hist(tsd, edgecolor='k', density=True, alpha=0.5)\n",
    "plt.hist(pn['pore.diameter'], edgecolor='k', density=True, alpha=0.5)\n",
    "plt.xlim([0, 50e-6]);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c15ad2b2",
   "metadata": {},
   "source": [
    "We can see from the above plot that the throat sizes are similar to the pore sizes, which is expected since they are taken from the pore sizes values. However, we can also see a small shift to the left, which is also expected given that the throats always take on the size of the smaller pore, creating a bias towards smaller sizes."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "acce746c",
   "metadata": {},
   "source": [
    "It may also be desirable to force the throats to be smaller than the two neighboring pores by some factor:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "ceca301c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm8AAAHPCAYAAAAFwj37AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAO6xJREFUeJzt3Ql41NW9//FvEkL2RAIBQoCCCIqsIkuhLKKoKCpWFhERoQItsoqgAiotAkWWqJUieC8XVCwIuCBYq8AFC4ggFmuKeMEFZA9byL7n/3xP/zPNJBMIyQyZk7xfzzNOcn5nTn7MKH5yVr+CgoICAQAAgBX8K/oGAAAAUHqENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AACAyhzeUlNTZcaMGdK7d2+Jjo4WPz8/WbFihdu6+fn58tprr0nbtm0lJCREatasKbfeeqv885//LFZv3rx50rhxYwkODpbWrVvLqlWr3LZ54MAB87PDw8PNz3/kkUfkzJkzbn+2p9sEAACoaNWu9AVnz56VmTNnSsOGDaVNmzaybdu2Euv+5je/kbfffluGDh0qY8eOlbS0NNm3b58kJia61Js+fbrMnTtXRo4cKR06dJD169fL4MGDTTAcNGiQs96xY8eke/fuEhUVJXPmzDFBcsGCBZKQkCB79uyR6tWre7VNAACACldwhTIzMwtOnjxpvv7yyy/1UPuC5cuXF6v3zjvvmGvvvffeJds7duxYQWBgYMGYMWOcZfn5+QXdunUrqF+/fkFubq6zfPTo0QUhISEFR44ccZZt2rTJ/JylS5d6tU0AAABf4Kf/KGvw27t3r+nVWr58uQwbNszl2i9/+UsNhrJ7924zhJmRkSFhYWHF2li8eLGMGTNG9u/fLzfeeKOzXIc4tads+/bt0rVrV1NWp04d6dGjh6xZs8aljeuvv14aNGggmzdv9lqbhemfIzMzUwICAqR27dplfPcAAEBVlZiYKHl5eWZql45MenXYtDSSk5PNkOPjjz8u06ZNk1dffdUMR+r8Mx3KHDhwoLOuDqNqGGrevLlLGx07dnRe16B1/Phx8wdt3759sZ+ndf/61796tc3CNIhqMNVQqm0AAACUhWaKK+WV8PbDDz+YcLN69WqpVq2aWTigc8peeeUVM98sMjLSLBBQJ0+eNL1fOhetsNjYWPN84sQJZ73C5UXrnj9/XrKysiQoKMgrbRZWms7KiIgI8+dExdHPVwO2v7+/288YvoHPyQ58Tvbgs/Id2pmVkpJyyTplGQD1SnjTXjZ17tw5+eKLL6RTp07m+/vuu8/0vs2aNcsZ3jRxFg1HSrsRHdcLP1+url73RpuFaRjQUKDi4uLcvgeTJk0yD1Sc+vXrm55RDW66MAW+ic/JDnxO9uCz8h3x8fHm4Y5j5E4zhU+EN90WRGlQcwQ3pVtx3HvvvbJy5UrJzc01vXJaV3u3itI5ZYXbcjyXtq6n23RH33BCAQAAuNKOHJ037+gI8olNeuvVq2eedeiyKJ3gn5OT45ycp70ip06dKtZt6BjSdLTlGPZylBetq/uzOXrIvNEmAACAL/BaeKtbt67byfw630yHJHVOmNINfNPT081GuYXpKlXHdcfwZExMjFnhWpQujnDU81abAAAAlfp4rAcffFCOHj0qmzZtctngVzfL1VMWHGO8ffv2lcDAQLO9h4P2mC1ZssSEqy5dujjL+/XrJxs3bjTtOmzZskUOHjwoAwYMcJZ5o00AAABfUKY5b4sWLZKkpCTnqs0NGzY4536NGzfOrCydOnWq2TtNw5GO92qZhicdMtWTDApPrJw4caLMnz/fXNN94z744AOzF5uezqBjwg667cjatWulZ8+eMmHCBLMwQl/XqlUrGT58uFfbBAAA8AVl2qS3UaNGcuTIEbfXfvrpJ3Nd/fjjjzJ58mTTk6UhqnPnzmafNw1ThemEvRdffFGWLl1q5po1bdrUhL+HH364WPu68a6GwR07dpijq/r06SMLFy4sNr/OG206XHPNNXLx4kUTSDXEwjfpCh9dpq1btrDy13fxOdmBz8kefFZ2KE+WKNcJC1V9GbYOwbLaFAAAXM0s4bU5bwAAAPA8whsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAVPbjsYDKRHe4Tk9P91h7oaGhZsdsAAC8gfAGqerBbfa8l+RciufCW82IUJn+1BMEOACAVxDeUKVpj5sGt+gWXSU8Krrc7aVePC/n9u8w7dL7BgDwBsIbIGKCW2TN2h55L87zjgIAvIgFCwAAABYhvAEAAFiE8AYAAGARwhsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWITwBgAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAGCRahV9A8CVunjxoqSnp3vkjTt9+rTk5GTzIQAArEF4g3XBbfa8l+RcimfCW3paqhw4+L3U75zlkfYAAPA2whusoj1uGtyiW3SV8Kjocrd36ufvJWv/d5Kbk+uR+wMAwNsIb7CSBrfImrXL3U7KhbMeuR8AAK4WFiwAAABYhPAGAABgEcIbAACARQhvAAAAlTm8paamyowZM6R3794SHR0tfn5+smLFiku+JicnR2688UZTd8GCBcWu5+fny7x586Rx48YSHBwsrVu3llWrVrlt68CBA+Znh4eHm5//yCOPyJkzZ65KmwAAANatNj179qzMnDlTGjZsKG3atJFt27Zd9jWvvvqq/PzzzyVenz59usydO1dGjhwpHTp0kPXr18vgwYNN2Bs0aJCz3rFjx6R79+4SFRUlc+bMMUFSw2BCQoLs2bNHqlev7tU2AQAArAtvsbGxcvLkSalbt67s3bvXBKNLSUxMNGHv6aeflueff77Y9ePHj8vChQtlzJgxsmjRIlM2YsQI6dGjh0yZMkUGDBggAQEBplzDVVpamnz11VcmPKqOHTvK7bffbnr/Ro0a5bU2AQAArBw2DQoKMsGttJ555hm5/vrrZciQIW6va4+YDqs+/vjjzjLtHRs9erTpFdu1a5ez/N1335V77rnHGbJUr169pFmzZrJmzRqvtgkAAFDpFyzosOMbb7whL7/8sglP7uzbt0/CwsKkefPmLuXa++W47uhN01689u3bF2tD6zrqeatNd7QHsn79+m4f8fHxl3wtAACo3OLj40vMCZohfO6EhYKCAhk3bpw8+OCD0rlzZzl8+LDbenrzderUKRbudHhWnThxwlmvcHnRuufPn5esrCzTM+iNNt3RRREaAN1JTk52Ww4AAKqG5OTkEnNCeXgtvOl8MZ30v27dukvWy8jIcBuOdIWo43rh58vV1eveaNMdf39/t8FPRUZGlvAnBgAAVUFkZKTExcW5vaYdSNoJ5DPhTZPm1KlTzeKABg0aXLJuSEiI6d0qKjMz03m98HNp63q6TXc0uOkcOgAAgKImTZpkHu7o0GlZe+W8MudNt9rIzs42Q6Y6XKoPR8i5cOGC+V6vOwLQqVOnzDBrYY4hzXr16jnrFS4vWlf3Z3P0kHmjTQAAAF/glfCme7ppSGvRooXZJFcf3bp1c27Nod9/++235vu2bdtKenq62Si3sN27dzuvK+12jImJMduTuFsY4ajnrTYBAAAqbXgbP368vP/++y6PpUuXmmvDhg0z32uAU3379pXAwEBZvHix8/XaY7ZkyRITrrp06eIs79evn2zcuFGOHj3qLNuyZYscPHjQ7N3m4I02AQAAfEGZ5rzpxrdJSUnOVZsbNmxwDovqCtN27dqZR2GO1abaG3f//fe7jPlOnDhR5s+fb/Zm001/P/jgA9m+fbu8/fbbzs101bRp02Tt2rXSs2dPmTBhgjkNQV/XqlUrGT58uFfbBAAAsDa86Zy2I0eOOL9/7733zEPpZrx61NSV0GOsatSoYXrndJVq06ZNZeXKleY4q8J08cNnn31mJv/p5r96dFWfPn3MaQpF56Z5o00AAAArw1tJe7ZdSqNGjYotICi85YauTtXH5WjP3SeffHLZet5oEwAAoFKfsAAAAADPIrwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWITwBgAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAGARwhsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWITwBgAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAGARwhsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWITwBgAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAFCZw1tqaqrMmDFDevfuLdHR0eLn5ycrVqxwqZOfn2/K7rvvPmnQoIGEhYVJy5YtZdasWZKZmem23WXLlknz5s0lODhYmjZtKq+++qrbesePH5eBAwfKNddcI5GRkdK3b1/58ccfr1qbAAAAVoW3s2fPysyZM+XAgQPSpk0bt3XS09Nl+PDhcubMGfnd734nL7/8snTs2NGEvrvuuksKCgpc6i9dulRGjBghLVq0MAGrc+fOMn78eHnxxReLBceePXvKZ599JtOmTZM//OEPsm/fPunRo4ecO3fO620CAABUtGpX+oLY2Fg5efKk1K1bV/bu3SsdOnQoVqd69eqyc+dO6dKli7Ns5MiR0qhRIxPgtmzZIr169TLlGRkZMn36dOnTp4+sW7fOWVd771544QUZNWqU1KhRw5QvXrxYDh06JHv27HH+XA2D2qu3cOFCmTNnjtfaBAAAsLLnLSgoyAS3S9HwVji4Ofz61782z9pr57B161bTw/X444+71B0zZoykpaXJRx995CzTIKYBq3BgvOGGG+S2226TNWvWeLVNAACAKrdg4dSpU+a5Vq1azjIdolTt27d3qXvzzTeLv7+/87r2mn3zzTfF6ikdkv3hhx8kJSXFa226oz2Q9evXd/uIj4+/gncGAABUNvHx8SXmBM0QV23YtDzmzZtnFgTosKSD3nxAQIDUrl27WO9dzZo15cSJE+b78+fPS1ZWlhm2LcpRpnWvv/56r7TpjoY/XezgTnJy8mXfDwAAUHklJyeXmBPK46qFN507tnnzZjPHTFd1Ouj8NA1V7ugqUb3uqOcYtnVXr3Adb7TpjvbiuQt+SkMqAACouiIjIyUuLs7tNe1o0k4gnw1v77zzjjz77LPy2GOPyejRo12uhYSESHZ2ttvX6bYiet1RT2lPmbt6het4o013NLgdO3asxOsAAKDqmjRpknm4o0OnZe2V8/qct02bNsnQoUPNys8lS5a4DUB5eXmSmJjoUq7hSxcd1KtXz3yve8ppD5m7MWJHmaOuN9oEAADwBV4Nb7t37zYrTHVBgK7crFateEdf27ZtzbNuO1KYfq/diY7rOkTZqlWrYvUcP+faa6+ViIgIr7UJAABQqcObbgeivW26t9vGjRtLHH689dZbTQ/Ya6+95lKu34eGhpo2HPr37y9ffvmlS9j6v//7P/nf//1fGTBggFfbBAAA8AVlmvO2aNEiSUpKcq7a3LBhg3Pu17hx40yP1p133ikXLlyQKVOmuOyrppo0aWJOPFAa6nTjXN2DTcOSvm779u2ycuVKmT17tglhDrpv23/913+Z8DV58mQJDAw0y3Dr1KkjTz75pLOeN9oEAACwNrwtWLBAjhw54vz+vffeMw81ZMgQ83z06FHz/MwzzxR7/aOPPuoMb44ApaFJTzT48MMPzXmoL730kkyYMMHldTqEuW3bNnniiSfMOak6BHrLLbeYujExMS51vdEmAACAleHt8OHDl61T9PzSy9Hjq/RxObo6Y+3atRXWJgAAQJU5YQEAAADlQ3gDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAKAyh7fU1FSZMWOG9O7dW6Kjo8XPz09WrFjhtu6BAwdMvfDwcFP3kUcekTNnzhSrl5+fL/PmzZPGjRtLcHCwtG7dWlatWuVzbQIAAFS0alf6grNnz8rMmTOlYcOG0qZNG9m2bZvbeseOHZPu3btLVFSUzJkzx4S+BQsWSEJCguzZs0eqV6/urDt9+nSZO3eujBw5Ujp06CDr16+XwYMHm2A4aNAgn2kTAADAuvAWGxsrJ0+elLp168revXtNMHJHg1BaWpp89dVXJuipjh07yu2332566kaNGmXKjh8/LgsXLpQxY8bIokWLTNmIESOkR48eMmXKFBkwYIAEBARUeJsAAABWDpsGBQWZ4HY57777rtxzzz3OQKR69eolzZo1kzVr1jjLtEcsJydHHn/8cWeZ9o6NHj3a9Irt2rXLJ9oEAACotAsWtOcrMTFR2rdvX+ya9mrt27fP+b1+HRYWJs2bNy9Wz3HdF9p0R3sg69ev7/YRHx9/ydcCAIDKLT4+vsScoBniqg2blobjhnSItSgtO3/+vGRlZZlePK1bp04d0zNWtJ46ceKET7Tpji6K0ADoTnJysttyAABQNSQnJ5eYE8rDK+EtIyPDPLsLPbry01FHrzueL1XPF9p0x9/f323wU5GRkW7LAQBA1RAZGSlxcXFur2kHknYC+Ux4CwkJMc/aa1VUZmamSx19Lm29imzTHQ1uOocOAACgqEmTJpmHOzp0WtZeOa/MeXP0Rrkbz9Uy3UvN0ZuldU+dOiUFBQXF6ql69er5RJsAAAC+wCvhTbsIY2JizFYiReneaW3btnV+r1+np6ebjXIL2717t/O6L7QJAABQqY/H6tevn2zcuFGOHj3qLNuyZYscPHjQ7LPm0LdvXwkMDJTFixc7y7THbMmSJSZcdenSxSfaBAAA8AVlmvOmG98mJSU5V21u2LDBOfdr3Lhx5rSCadOmydq1a6Vnz54yYcIEc3LB/PnzpVWrVjJ8+HCXMd+JEyeaa7o3m276+8EHH8j27dvl7bffdm6mqyqyTQAAAGvDmx4fdeTIEef37733nnmoIUOGmPDWoEED+eyzz8xEvWeeecYcM9WnTx9z8kHReWR6jFWNGjVk6dKl5lSDpk2bysqVK81xVoVVdJsAAABWhrfDhw+Xql6LFi3kk08+uWw93XJj6tSp5uHLbQIAAFTaOW8AAADwPMIbAACARQhvAAAAFiG8AQAAWITwBgAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAGARwhsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWITwBgAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAGARwhsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWKRaRd8AUNlkZ2XJ6dOnPdpmaGioREVFebRNAICdCG+AB2Wmp8o3Cd/IvD8vk5CQEI+1WzMiVKY/9QQBDgBAeAM8KScrU7Lz/aTGjb+S2rH1PdJm6sXzcm7/DklPTye8AQAIb4A3hEXWkMiatT3W3nmPtQQAsB0LFgAAACzCnDd43cWLF82QnyfoQoCcnGyPtAUAgI0Ib/B6cJs97yU5l+KZ8JaelioHDn4v9TtneaQ9AABs49Vh00OHDsmgQYOkfv36ZquDG264QWbOnFmsF+bzzz+Xrl27mjp169aV8ePHS2pqarH2srKy5Omnn5Z69eqZlXydOnWSTZs2uf3Z3mgTV04/aw1u0S26SsMu95X7cc31HSUrJ1dyc3L5OAAAVZLXet6OHj0qHTt2NKvjxo4dK9HR0bJr1y6ZMWOGfPXVV7J+/XpT7+uvv5bbbrtNmjdvLvHx8XLs2DFZsGCBCX4ff/yxS5vDhg2TdevWycSJE6Vp06ayYsUKufvuu2Xr1q0mqDl4o02UT3hUtEcm8KdcOMtHAQCo0rwW3t566y1JSkqSHTt2SIsWLUzZqFGjJD8/X9588025cOGC1KhRQ6ZNm2aet23bJpGRkaZeo0aNZOTIkfLpp5/KHXfcYcr27Nkjq1evlvnz58vkyZNN2dChQ6Vly5by1FNPmZ42B2+0CQAAUKmHTZOTk81znTp1XMpjY2PF399fqlevburoEOWQIUOcIcsRoMLDw2XNmjXOMu0dCwgIMAHQITg4WB577DHTo6c9fY6f6+k2AQAAKn14u+WWW8yzBiEdxtQg9M4778hrr71m5p+FhYVJQkKC5ObmSvv27V1eq8Gubdu2sm/fPmeZft2sWTOXQKZ0aFbpz1DeaLMkJ0+eNPP53D10uBYAAFRd8fHxJeYEzRA+N2zau3dveeGFF2TOnDny4YcfOsunT58us2bNMl87blx744rSsu3btzu/17ol1VMnTpzwWpsl0SHg48ePX7LnEQAAVE3Jyckl5gSf3SpE55l1795d+vXrJzVr1pSPPvrIhDld/amLGDIyMky9oKCgYq/V4UvHdaVfl1TPcb3wsyfbLIkO/7oLf6pobx4AAKhaIiMjJS4uzu017UDSTiCfCm+6EEDnkh08eNB0D6oHHnjA3KhuzfHQQw85D+7W7TqKyszMdDnYW78uqZ7jeuFnT7ZZEg1uupIVAACgqEmTJpmHO5qNytor57U5b4sXL5abbrrJGdwc7rvvPrP3l843c/RauRv31TLde81B65ZUTznqeqNNAAAAX+G18KbHGOXl5RUrz8nJMc+6qEC35KhWrZrs3bvXpU52drZZLKALDBz0a+3FKzqXbPfu3c7ryhttAgAAVPrwpqs4tXdNw1Fhq1atMnPFWrdubTbw7dWrl6xcuVJSUlJc9ojT0xAGDBjgLOvfv78Jg6+//rqzTIc8ly9fbk5FaNCggSnzRpsAAAC+wmtz3qZMmWJOM+jWrZtZnKALFjZu3GjKRowY4RySnD17tnTp0kV69Ohh5sjpHLKFCxeajXR1xaqDhikNXlOnTpXExES57rrr5I033pDDhw/LsmXLXH62N9oEAACo1D1vuspUTyi4+eabzfw3PX7qhx9+MMFK93pzaNeunWzevNksDnjiiSdML5juDacb6BalJzNoO9qLpnvF6RCsBkL9WYV5o00AAABf4NWtQnSz27/+9a+XradniO7cufOy9XQLDz3KSh8V0SYAAECl7XkDAACA5xHeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLVKvoGwCAS7l48aKkp6db+yaFhoZKVFRURd8GgEqE8AbAp4PbovmzJCflrNgqMKKWjJ3yLAEOgD3h7R//+If8/ve/lx07dkhmZqZce+21MmrUKBk/fryzzueffy5PPfWUqRsZGSkDBw6UOXPmSHh4uEtbWVlZ8vzzz8tbb70lFy5ckNatW8usWbPk9ttvL/ZzvdEmgKtLe9w0uD3QKkJirgmz7u0/k5Qm7yWcNX8Oet8AWBHePv30U7n33nvlpptukueee84Epx9++EGOHTvmrPP111/LbbfdJs2bN5f4+HhzbcGCBXLo0CH5+OOPXdobNmyYrFu3TiZOnChNmzaVFStWyN133y1bt26Vrl27erVNABVHg1tszUhLP4KUir4BAJWM18JbcnKyDB06VPr06WPCkb+/+7UR06ZNkxo1asi2bdtMD5lq1KiRjBw50oS/O+64w5Tt2bNHVq9eLfPnz5fJkyebMm2/ZcuWpodNe9q82SYAAEClXm36l7/8RU6fPi2zZ882wS0tLU3y8/OLBbxNmzbJkCFDnCHLEaC0l27NmjXOMg2AAQEBZsjVITg4WB577DHZtWuXHD161GttAgAAVPrwtnnzZhOejh8/Ltdff70JTvr96NGjzdw3lZCQILm5udK+fXuX11avXl3atm0r+/btc5bp182aNXMJZKpjx47OoVJvtVmSkydPSv369d0+dLgWAABUXfHx8SXmBM0QPjdsqvPLNET17dvX9GT98Y9/NMOYr776qiQlJcmqVaucNx4bG1vs9Vq2fft25/dat6R66sSJE856nm6zJNqTqOHUHe0BBIDMrGwzCmErtjoByk6zQEk5oTy8Ft5SU1PNCqvf/e538qc//cmUPfDAA5KdnS1Lly6VmTNnSkZGhikPCgoq9nodvnRcV/p1SfUc1ws/e7LNkuhwsLvwp4r25gGoepLTMiUh4RvJXzxXQkNCxEZsdQKUnWaBuLg4t9e0A6nodLIKD28h//8vqoceesilfPDgwSa86Zwy/Y3OsV1HUTq06mjD0V5J9Qr/PMezJ9ssiQa3witnAaCwjOxcCczPkl+3DJdG9WKse3PY6gQon0mTJpmHOzp0WtZeOa+Ft3r16sn+/fulTp06LuW1a9c2z7qnWpMmTczX7sZ9tUzbKByU3P0hHa911HX0hHmyTQAoj1pRoWx1AsD3FyzcfPPN5rloOHLMI4uJiTFbclSrVk327t3rUkeHVnWxgC4wcNCvDx48WGwu2e7du53XlTfaBAAAqPThTU80UMuWLXMp/+///m8Trm655Raz43ivXr1k5cqVkpLyn40s9bQDnTM3YMAAZ1n//v0lLy9PXn/9dWeZDnkuX75cOnXqJA0aNDBl3mgTAADAV3ht2FRPVfjNb34j//M//2NWnfbo0cOsNl27dq1MnTrVOSSp+8B16dLFXNf91nQO2cKFC81Gur1793a2p2FKg5e+NjExUa677jp544035PDhw8UCojfaBAAAqPTHYy1ZskQaNmxoerLef/99+cUvfiEvvfSSOYrKoV27dmZPuKefflqeeOIJiYiIcG4tUtSbb75pjtkqfA7pxo0bpXv37i71vNEmAABApQ9vgYGBMmPGDPO4FD1DdOfOnZdtT7fw0KOs9HE53mgTAACg0s55AwAAgOcR3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsMhVDW+zZ88WPz8/admyZbFrn3/+uXTt2lVCQ0Olbt26Mn78eElNTS1WLysrS55++mmpV6+ehISESKdOnWTTpk1uf5432gQAAKgS4e3YsWMyZ84cCQsLK3bt66+/lttuu03S09MlPj5eRowYIa+//roMGDCgWN1hw4aZOg8//LC88sorEhAQIHfffbfs2LHD620CAABUtGpX6wdNnjxZfvnLX0peXp6cPXvW5dq0adOkRo0asm3bNomMjDRljRo1kpEjR8qnn34qd9xxhynbs2ePrF69WubPn2/aU0OHDjU9eU899ZTpafNmmwAAAFWi5+3vf/+7rFu3Tl5++eVi15KTk80Q5ZAhQ5whyxGgwsPDZc2aNc4ybUN7xUaNGuUsCw4Olscee0x27dolR48e9VqbAAAAVaLnTXva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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pn['throat.diameter'] = tsd*0.5\n",
    "plt.hist(pn['throat.diameter'], edgecolor='k', density=True, alpha=0.5)\n",
    "plt.hist(pn['pore.diameter'], edgecolor='k', density=True, alpha=0.5)\n",
    "plt.xlim([0, 50e-6]);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d309397",
   "metadata": {},
   "source": [
    "One downside of the above approach is that you no longer have control over the shape and distribution of the throat sizes. This can be solved by applying the same approach just described but to *random seeds* instead of actual sizes. Then the random seeds can be put into a cumulative density function to compute the corresponding size.  This is demonstrated below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "a5300fc4",
   "metadata": {},
   "outputs": [],
   "source": [
    "lo, hi = 0.01, 0.99\n",
    "pn['pore.seed'] = np.random.rand(pn.Np)*(hi - lo) + lo"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8dae3979",
   "metadata": {},
   "source": [
    "```{tip}\n",
    "  Setting the `lo` and `hi` values of the seeds prevents values that lie far out in the tail of a distribution from occurring which can lead to overly large pores or throats.\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8a1c8006",
   "metadata": {},
   "source": [
    "The `ppf` function, or *point probability function* returns the value of a cumulative distribution at the given probability, so the seed values computed above can be related to size values using:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "26d114de",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import scipy.stats as spst\n",
    "psd = spst.norm.ppf(loc=25, scale=6, q=pn['pore.seed'])\n",
    "pn['pore.diameter'] = psd*1e-6\n",
    "plt.hist(pn['pore.diameter'], edgecolor='k')\n",
    "plt.xlim([0, 50e-6]);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a5adfbfa",
   "metadata": {},
   "source": [
    "Now we can find the throat seed values as the *minimum pore seed* value of the two neighboring pores:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "8b88f316",
   "metadata": {},
   "outputs": [],
   "source": [
    "pn['throat.seed'] = np.amin(pn['pore.seed'][pn.conns], axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5d1c6c94",
   "metadata": {},
   "source": [
    "And then we can use these seed values in the `ppf` function of the desired distribution. So long as the distribution does not create larger values than the distribution used to compute pore sizes, then the throat sizes will always be smaller."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "895c820d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "tsd = spst.norm.ppf(loc=25, scale=6, q=pn['throat.seed'])\n",
    "pn['throat.diameter'] = tsd*1e-6\n",
    "plt.hist(pn['throat.diameter'], edgecolor='k', density=True, alpha=0.5)\n",
    "plt.hist(pn['pore.diameter'], edgecolor='k', density=True, alpha=0.5)\n",
    "plt.xlim([0, 50e-6]);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7c3c2104",
   "metadata": {},
   "source": [
    "Once the pore and throat diameters are specified, the next step is to define any dependent properties of interest, such as pore volume or throat length. These additional calculations tend to require that we assume a shape for the pores and throats.  It is not mandatory to use spheres and cylinders, though this is a common choice.  We could also work with cubic pores and cuboid throats, which occupy a large volume fraction for instance.  The choice of cubic shapes also happens to make the calculations much easier, for reasons explored below, so in this tutorial we'll assume cubic shapes.  Let's calculate the throat length, and pore surface area, since each of these illustrate very important concepts regarding the use of vectorized calculations."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15cdc018",
   "metadata": {},
   "source": [
    "### Computing throat length\n",
    "\n",
    "Throat length is the pore-to-pore spacing, less the radius of each pore.  This can be found without the need for a for-loop using the following vectorization trick:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "9c8bc582",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[5.e-05 5.e-05 5.e-05 ... 5.e-05 5.e-05 5.e-05]\n"
     ]
    }
   ],
   "source": [
    "R1, R2 = (pn['pore.diameter'][pn.conns]/2).T\n",
    "L_total = np.sqrt(np.sum(np.diff(pn.coords[pn.conns], axis=1).squeeze()**2, axis=1))\n",
    "Lt = L_total - R1 - R2\n",
    "print(L_total)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f68b01d8",
   "metadata": {},
   "source": [
    "The above cell contains 3 complicated but powerful steps:\n",
    "1. The radii of the pores on each end of each throat are retrieved. `R1` and `R2` contain duplicates since each pore has numerous throats, so they appear once for each throat. This fact is used in step 3.\n",
    "2. The pore-to-pore distance is found by retrieving the coordinates of each pore, in the same was as was done for the radii. The Euclidean distance between each pair of pores is then computed by finding their difference (`np.diff`), squaring it, summing it (`np.sum`), then taking the square root (`np.sqrt`) of each. The `axis` argument is used throughout to tell numpy which way to apply the operation. This line is an example of how you must learn a *mini-language* to use numpy effectively. \n",
    "3. The length of each throat is found as the spacing between pores, less the radii of the pore on each end. This is where the duplicate values in `R1` and `R2` are necessary, since the radii of pore *i* must be subtracted from length of each of its neighboring throats.\n",
    "\n",
    "The main take-home message here is that throat properties can be computed in a vectorized way, even if some pore-properties are required. This avoids the use of a for-loop to scan through a list of throats followed by a nested for-loop to scan through each neighboring pore."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d57f31e0",
   "metadata": {},
   "source": [
    "### Computing pore surface areas\n",
    "The pore surface area is the total area of the cubic pore body, less the cross-sectional area of each neighboring throat. This can also be found without a for-loop, but requires knowing some deeper `numpy` functionality, known as [unbuffered in-place operations](https://numpy.org/doc/stable/reference/generated/numpy.ufunc.at.html):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "9850978b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[9.08485305e-10 5.68134509e-09 2.33947201e-09 ... 6.57211706e-10\n",
      " 1.92152447e-09 1.72429278e-09]\n"
     ]
    }
   ],
   "source": [
    "At = pn['throat.diameter']**2\n",
    "SAp = (pn['pore.diameter']**2)*6\n",
    "np.subtract.at(SAp, pn.conns[:, 0], At)\n",
    "np.subtract.at(SAp, pn.conns[:, 1], At)\n",
    "print(SAp)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a1f2c36",
   "metadata": {},
   "source": [
    "The above cell contains 2 lines of importance, which each do almost the same thing:\n",
    "1. The first line subtracts the throat cross-sectional area from each pore listed in the first column of the `pn.conns` array. Since a given pore is connected to potentially many throats, the subtraction must be done using `np.substract.at` which is a special version of the subtract function that subtracts every value in `At` from the locations in `SAp` indicated by `pn.conn[:, 0]`, and it does so in a cumulative fashion. Thus if pore *i* appears in `pn.conns[:, 0]` more than once, then more than one value of `At` is removed. The operation is performed *in-place* so that no array is returned.\n",
    "2. Recall that `pn.conns` contains only the upper-triangular entries of the adjacency matrix, so this process only gets half of the connections. This means that the pore connections found in `pn.conns[:, 1]` must also be analyzed."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4ef26402",
   "metadata": {},
   "source": [
    "## Using Pore-scale Models from the Library\n",
    "\n",
    "The above section is quite lengthy, but lays bare the process of computing geometric properties of a network for illustration purposes.  In this section we'll utilize OpenPNM's library of 'pore-scale' models to get the same job done much more easily. Start by generating a fresh network:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "4c7e5341",
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(0)\n",
    "pn = op.network.Cubic([20, 20, 20], spacing=5e-5)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "460a0434",
   "metadata": {},
   "source": [
    "First let's assign a random number to each pore, but instead of using `np.random.rand` directly, we'll use a pore-scale model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "ba5de6a1",
   "metadata": {},
   "outputs": [],
   "source": [
    "f = op.models.geometry.pore_seed.random\n",
    "pn.add_model(propname='pore.seed',\n",
    "             model=f,\n",
    "             seed=None,  # Seed value provided to numpy's random number generator.\n",
    "             num_range=[0.01, 0.99],)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9421fc7f",
   "metadata": {},
   "source": [
    "```{note} **Where do models go?**  \n",
    "\n",
    "  We'll look more closely at models later in this tutorial, but it's worth pointing out that the `add_model` method collects all the arguments provided and stores them in the `models` attribute of the object. Later, when `regenerate_models` is called, it looks into the `models` attribute and fetches the model (`f`) and the given arguments, calls the function, collects the returned result, and stores them in `pn[propname]`. You can see a list of models applied to the object with `print(pn.models)`. \n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cb01c08b",
   "metadata": {},
   "source": [
    "Let's have each throat inherit the minimum seed value found in each of its neighboring pores, for which OpenPNM provides a model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "5529e24c",
   "metadata": {},
   "outputs": [],
   "source": [
    "f = op.models.geometry.throat_seed.from_neighbor_pores\n",
    "pn.add_model(propname='throat.seed',\n",
    "             model=f,\n",
    "             prop='pore.seed',\n",
    "             mode='min')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "72d55b9b",
   "metadata": {},
   "source": [
    "```{tip} **Using shift-tab to see the docstring** \n",
    "\n",
    "  In the above two code blocks the models were assigned to `f` first, then `f` was passed to the `model` argument. This is helpful for two reasons.  (1) It helps keep the line length below Python's preferred limit of 78 characters, and (2) it makes it possible to see the docstring of the model by putting the cursor at the end of the first line and hitting `shift-tab`. Seeing the docstring really helps to understand what a model does and what arguments are required.\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2b9bec66",
   "metadata": {},
   "source": [
    "Now we can compute pore and throat sizes from distributions, which are also provided as OpenPNM models:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "3ddc9a3d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm8AAAHPCAYAAAAFwj37AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMhRJREFUeJzt3Qt8zXee//FPEiRxiXUXEUPrWte6LqvUiFbR6tSlqqmyLjOqLg1al7Z2tCwl2k6tYseidFj0gnS6LRbjVpoOu2aalmkHSYS4NkISaZL/4/P9P87ZnOQkTnCcfE9ez8fjPE7y/X3PL7/fOS7vfK8BeXl5eQIAAAArBPr6AgAAAOA5whsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiknfq5SpUqSmZkpQUFBUrt2bV9fDgAAgFupqamSk5MjISEhcv36dfeVRCTA3xfp1dCWm5vr68sAAADwSGBgoAlxZbblzRHe9I0IDw93lqekpLgtR+nFZ2YfPjP78JnZh8/Mfz4zR7lml+L4fXjTrtLk5GTz5iQlJTnL69ev77YcpRefmX34zOzDZ2YfPjP/+cwc5bca5sWEBQAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACL+P1s06LExMRIWlqahIWF+fpS4CE+M/vwmdmHz8w+fGZl7zPz+0V6HdNuIyIiWBIEAABYn1noNgUAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALFJmd1gA4BtnzpyRixcv+sXbX7NmTWnQoIGvLwNAGUN4A3BPg1uz5i0kM+OGX7zrIaEV5fvvEghwAO4pwhuAe0Zb3DS41RgwVcrXiLT6nc++lCiX4mLNPdH6BuBeIrwBuOc0uAXXbcw7DwC3gQkLAAAAFiG8AQAAWIRuUwC4AwkJCda/f8yaBexCeAOA25CTfkUkIECio6Otf/+YNQvYhfAGALchNytdJC/P+pmzzJoF7EN4A4A7wMxZAPcaExYAAAAsQngDAADw5/CWnp4uc+bMkb59+0r16tUlICBA1qxZU+xrsrOz5YEHHjB1Fy9eXOh4bm6uvPXWW9KoUSMJCQmRNm3ayIYNG4qc2aU/u3LlyubnP/fcc3LhwoWS3gYAAEDZCG+6FczcuXNNiGrbtq1Hr3nvvffMnoZFmT17trzyyivSp08fU1e3mhk+fLhs3LjRpV5SUpL06NFD/va3v8n8+fNl2rRp8tlnn5nX3bx5s6S3AgAA4P8TFsLDwyUlJUXq1q0r8fHx0qlTp2Lrp6ammrCn4ez1118vdDw5OVliY2NlwoQJsnTpUlM2ZswY6dmzp0yfPl2GDBkiQUFBplwD2/Xr1+Wbb75x7iXYuXNnE9609W/cuHElvR0AAAD/bnkLDg42wc1TM2bMkGbNmhW5FtLWrVtNt+oLL7zgLNPu1fHjx5uWtkOHDjnLP/roIxkwYIDLJtBRUVHStGlT2bRpU0lvBQAAwDpeXSrkyJEjsnbtWtm/f78JZO4cPXpUKlWqJC1atHAp1xY1x/Hu3bubFjptxevYsWOhc2jdP/7xj8Vei7YW1q9f3+2xmJgY8wAAAPCmJUuWmEdRWcWn4S0vL08mTpwoTz/9tHTt2lVOnTpV5IXWqVOnULjT7ll19uxZZ7385QXrXr58WbKyskzLoDs6KUIDoDtpaWklvDsAAICS08xRVB7xlNfCm45BO378uGzZsqXYehkZGW4Dl846dRzP/3yrukWFt8DAQLfBT4WFhd3yfgAAAO6UZo6IiAi3x7ShShubfBLeNFXOnDnTTDiIjCx+25jQ0FDTYlZQZmam83j+Z0/quqPBTcfQAQAA+EpxQ7V0eJcnrXJeWaRX13LTpTu0y1S7S/XhCE5Xrlwx3zuW9tBQde7cOdPNmp+jm7RevXrOevnLC9bVNd+KanUDAADwF14Jb7qmm4a0li1bmoV39fHQQw85l/vQ77/99lvzfbt27eTGjRtm3bj8Dh8+7DyutImxVq1aZnkSdxMjHPUAAAD8mVfC26RJk+STTz5xeaxYscIcGzlypPleA5waOHCglC9fXpYtW+Z8vbbCLV++3AS2bt26OcsHDRokcXFxkpiY6CzbtWuXnDhxwqwHBwAA4O9ua8ybLqZ79epV50zQ7du3O7tFdYZp+/btzSM/x2xTbY178sknXfp3p0yZIosWLTLrvemiv59++qns27dPPvzwQ+cCvWrWrFmyefNm6dWrl0yePNls1aWva926tYwaNer23gEAAAB/D286pu306dPO7z/++GPzULoYb9WqVUt0vgULFki1atVM65zOUm3SpImsX7/ebJGVn05+2Lt3rxnop4v/VqhQQfr37292aGC8GwAAKAtuK7wVtWZbcRo2bFhoUkL+ZTx0dqo+bkVb7r744osS/3wAAAB/4JUxbwAAAPAOwhsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWITwBgAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAGARwhsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWITwBgAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAGARwhsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWITwBgAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAGARwhsAAIA/h7f09HSZM2eO9O3bV6pXry4BAQGyZs0alzq5ubmm7IknnpDIyEipVKmStGrVSt58803JzMx0e95Vq1ZJixYtJCQkRJo0aSLvvfee23rJyckydOhQ+Yd/+AcJCwuTgQMHyo8//ljS2wAAACgb4e3ixYsyd+5cSUhIkLZt27qtc+PGDRk1apRcuHBBfvOb38g777wjnTt3NqHvsccek7y8PJf6K1askDFjxkjLli1NaOvatatMmjRJFi5cWCg49urVS/bu3SuzZs2S3/72t3L06FHp2bOnXLp0qaS3AgAAYJ1yJX1BeHi4pKSkSN26dSU+Pl46depUqE6FChXkwIED0q1bN2fZ2LFjpWHDhibA7dq1S6Kiokx5RkaGzJ49W/r37y9btmxx1tXWuzfeeEPGjRsn1apVM+XLli2TkydPypEjR5w/V8OgturFxsbK/Pnzb/+dAAAA8MeWt+DgYBPciqPhLX9wc/jVr35lnrXVzmH37t2m1eyFF15wqTthwgS5fv26fPbZZ84yDXca2vIHxubNm0vv3r1l06ZNJb0VAAAA69zTCQvnzp0zzzVr1nSWaben6tixo0vdDh06SGBgoPO4tsT97//+b6F6Srtkf/jhB7l27VqRP1tbC+vXr+/2sWTJkrt2jwAAAEXRzFFUHtGs4pVu0zvx1ltvmUkG2tXpoBcaFBQktWvXLtR6V6NGDTl79qz5/vLly5KVlWW6bQtylGndZs2auf3ZGv50soM7aWlpd3RfAAAAntDMUVQe8dQ9C286Hm3nzp1m3JrOFHXQMW8a1NzRmad63FHP0W3rrl7+Ou5oK5674Kc0UAIAAHibZo6IiAi3x7RBSxubSkV4+8///E959dVXZfTo0TJ+/HiXY6GhoXLz5k23r9NlRfS4o57S1jd39fLXcUeDW1JS0h3dBwD4q/xjkW2mw3IaNGjg68sAihQTE2Me7mjXqSetcl4Pbzt27JARI0aY2aTLly93G6pycnIkNTXVpetUA51OZKhXr575XteU01Y3d/3BjjJHXQCAZ3LSr4gEBEh0dLRfvGUhoRXl++8SCHDwa14Nb4cPHzYzTHWSgc4GLVeu8I9r166dedZlR/r16+cs1++16dBxXLs9W7dubcrd/Zz77rtPqlSp4s3bAQC/k5uVLpKXJzUGTJXyNSLFZtmXEuVSXKxZj5TWN/izct5sgtfWNl3bLS4ursguzV/+8pemVe399993CW/6fcWKFc05HAYPHiwzZswwAc4x6/T777+X//7v/5Zp06Z561YAnztz5oz5D8l2/tI15480uAXXbezrywDgrfC2dOlSuXr1qnMm6Pbt253jySZOnGhayR599FG5cuWKTJ8+3WWtNnX//febXRSUhjpdjFfXdRsyZIh53b59+2T9+vUyb948E+wcdC24f//3fzeBTsNa+fLlzZTbOnXqyNSpU2/nVgArgluz5i0kM+OGry8FAGBreFu8eLGcPn3a+f3HH39sHsoxbiIxMdE8a0tZQc8//7wzvDlCmQYx3SVh27ZtZj/Ut99+WyZPnuzyOu0W3bNnj7z00ktmn1TtVn344YdN3Vq1at3OrQClnra4aXDzh26tjB/j5ad96319GQBQ9sLbqVOnblmn4P6lt6JbYunjVnQmxubNm0t0bsAf+EO3lo5JAgBYtMMCAAAA7gzhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwJ/DW3p6usyZM0f69u0r1atXl4CAAFmzZo3bugkJCaZe5cqVTd3nnntOLly4UKhebm6uvPXWW9KoUSMJCQmRNm3ayIYNG+7onAAAAP6oXElfcPHiRZk7d640aNBA2rZtK3v27HFbLykpSXr06CFVq1aV+fPnm9C3ePFiOX78uBw5ckQqVKjgrDt79mxZsGCBjB07Vjp16iRbt26V4cOHm2A4bNiw2zonAACAPypxeAsPD5eUlBSpW7euxMfHm7Dljoar69evyzfffGOCnurcubP06dPHtNSNGzfOlCUnJ0tsbKxMmDBBli5dasrGjBkjPXv2lOnTp8uQIUMkKCioROcEAADwVyXuNg0ODjbB7VY++ugjGTBggDNkqaioKGnatKls2rTJWaatbNnZ2fLCCy84y7TFbfz48aal7dChQyU+JwAAgL/yyoQFbU1LTU2Vjh07FjqmLWVHjx51fq9fV6pUSVq0aFGonuN4Sc/pjrYW1q9f3+1jyZIlt32vAAAAntLMUVQe0azilW5TTzh+uHaxFqRlly9flqysLNOKp3Xr1KljWtsK1lNnz54t8Tnd0UkRGgDdSUtLK/E9AgAAlJRmjqLyiKe8Et4yMjLMs7sgpbNJHXX0uOO5uHolPac7gYGBboOfCgsL8/jeAAAAbpdmjoiICLfHtKFKG5t8Et5CQ0PNs7aEFZSZmelSR589refpOd3R4KZj6AAAAHwlJibGPNzRrlNPWuW8MubN0cLlru9Wy3R9NkcLmdY9d+6c5OXlFaqn6tWrV+JzAgAA+CuvhDdtDqxVq5ZZSqQgXY+tXbt2zu/16xs3bpjFd/M7fPiw83hJzwkAAOCvvLY91qBBgyQuLk4SExOdZbt27ZITJ06YtdscBg4cKOXLl5dly5Y5y7QVbvny5SawdevWrcTnBAAA8Fe3NeZNF9O9evWqcybo9u3bnePJJk6caHZAmDVrlmzevFl69eolkydPNrshLFq0SFq3bi2jRo1y6d+dMmWKOabrvemiv59++qns27dPPvzwQ+cCvcrTcwIAAPir2wpvuiXV6dOnnd9//PHH5qGio6NNeIuMjJS9e/eaQXkzZswwW1f179/f7KZQcGyabo1VrVo1WbFihdkpoUmTJrJ+/XqzRVZ+JTknAACAP7qt8Hbq1CmP6rVs2VK++OKLW9bTZTxmzpxpHnfrnAAAAP7Ia2PeAAAAcPcR3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACzi1fB28uRJGTZsmNSvX18qVqwozZs3l7lz58qNGzdc6h08eFC6d+9u6tStW1cmTZok6enphc6XlZUlr7zyitSrV09CQ0OlS5cusmPHDm/eAgAAQKlSzlsnTkxMlM6dO0vVqlXlxRdflOrVq8uhQ4dkzpw58s0338jWrVtNvWPHjknv3r2lRYsWsmTJEklKSpLFixeb4Pf555+7nHPkyJGyZcsWmTJlijRp0kTWrFkj/fr1k927d5vwBwAA4O+8Ft7WrVsnV69elf3790vLli1N2bhx4yQ3N1c++OADuXLlilSrVk1mzZplnvfs2SNhYWGmXsOGDWXs2LHy5ZdfyiOPPGLKjhw5Ihs3bpRFixbJtGnTTNmIESOkVatW8vLLL5vWOwAAAH/ntW7TtLQ081ynTh2X8vDwcAkMDJQKFSqYOtrtGR0d7QxujlBWuXJl2bRpk7NMW9yCgoJMAHQICQmR0aNHmxY9bekDAADwd15reXv44Ydl4cKFJlz99re/lRo1apjWsffff9+MaatUqZIcOHBAfv75Z+nYsaPLazXYtWvXTo4ePeos06+bNm3qEvKUds06ul8jIyOLvJ6UlBQz9s6dmJgY84D/OXPmjFy8eFFslpCQ4OtLAADcJTpETB9FZRWfhre+ffvKG2+8IfPnz5dt27Y5y2fPni1vvvmmy0Vqa1xBWrZv3z7n91q3qHrq7NmzxV6PdtcmJycX20oI/wtuzZq3kMwM1wkyAAD4imaOovKIp7wW3hxj13r06CGDBg0yLW+fffaZCXM6o1QnMWRkZJh6wcHBhV6rXaKO40q/Lqqe43hxtKvWXfhTBVvz4B+0xU2DW40BU6V8jaJbZUu7jB/j5ad96319GQCAu0AzR0REhNtj2lCljU0+C286uUDHp504ccLZXfnUU0+Zi9LlPp555hmz3IdjCZCCMjMznceVfl1UPcfx4mhw05msKHs0uAXXbSy2yr7EeE4A8BcxxQzV0rzkSauc1yYsLFu2TB588MFC48yeeOIJs86bjmFztIS56+PVMl3PzUHrFlVP5a8LAADgr7wW3s6fPy85OTmFyrOzs82zTlTQZT7KlSsn8fHxLnVu3rxpJiDopAUH/Vpb8QqOTzt8+LDzOAAAgL/zWnjTmaHauqaBK78NGzaY8Wdt2rQxC/hGRUXJ+vXr5dq1ay5rxOkOC0OGDHGWDR482ITBlStXOsu0G3X16tVmp4XiZpoCAAD4C6+NeZs+fbrZIeGhhx4ykxN0wkJcXJwpGzNmjLObc968edKtWzfp2bOnGSOn49JiY2PN4rw6Y9VBA5qGuZkzZ0pqaqo0btxY1q5dK6dOnZJVq1Z56zYAAADKRsubzjLVdd06dOhgxr/pllY//PCDCWu61ptD+/btZefOnWbCwUsvvWRa1nRtOF2UtyDdmUHPoy1zulacdsFqINSfBQAAUBZ4dakQXUD3j3/84y3r6b6kumDvreiyILo9lj4AAADKIq+1vAEAAODuI7wBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWITwBgAAYBGvrvMGAMC9lpCQYP2bXrNmTWnQoIGvLwOlFOENAOAXctKviAQESHR0tNguJLSifP9dAgEObhHeAAB+ITcrXSQvT2oMmCrla0SKrbIvJcqluFi5ePEi4Q1uEd4AAH5Fg1tw3ca+vgzAa5iwAAAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAGARwhsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWITwBgAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAGARwhsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWITwBgAAYBHCGwAAgEUIbwAAABbxenj785//LE888YRUr15dKlasKK1atZLf/e53LnUOHjwo3bt3N8fr1q0rkyZNkvT09ELnysrKkldeeUXq1asnoaGh0qVLF9mxY4e3bwEAAKDUKOfNk3/55Zfy+OOPy4MPPiivvfaaVK5cWX744QdJSkpy1jl27Jj07t1bWrRoIUuWLDHHFi9eLCdPnpTPP//c5XwjR46ULVu2yJQpU6RJkyayZs0a6devn+zevduEPwAAAH/ntfCWlpYmI0aMkP79+5vAFRjovpFv1qxZUq1aNdmzZ4+EhYWZsoYNG8rYsWNN+HvkkUdM2ZEjR2Tjxo2yaNEimTZtminT82tL3ssvv2xa7wAAAPyd17pN//CHP8j58+dl3rx5Jrhdv35dcnNzCwU87faMjo52BjdHKNNWuk2bNjnLNAAGBQXJuHHjnGUhISEyevRoOXTokCQmJnrrVgAAAPw/vO3cudMEsuTkZGnWrJkJY/r9+PHjJTMz09Q5fvy4/Pzzz9KxY0eX11aoUEHatWsnR48edZbp102bNnUJeapz587O7tfipKSkSP369d0+tLsWAADA2zRzFJVHNKv4tNtUx6xpMBs4cKBpHfvXf/1X0zX63nvvydWrV2XDhg3OiwwPDy/0ei3bt2+f83utW1Q9dfbs2WKvR1v9NEi6oy2AAAAA3qaZo6g84imvhTedLXrjxg35zW9+45xd+tRTT8nNmzdlxYoVMnfuXMnIyDDlwcHBhV6vXaKO40q/Lqqe43hxtOvWXfhTBVvzAAAAvEEzR0REhNtj2lBVcIjZPQ1vupSHeuaZZ1zKhw8fbsKbjlPTpUEcS4AUpF2rjnM4zldUvfw/ryga3PLPcgUAALjXYmJizMMd7Tr1pFXOa2PedC02VadOHZfy2rVrm+crV644W8Lc9fFqmeMcSusWVS//zwMAAPBnXgtvHTp0MM8FE6RjbFqtWrXMMh/lypWT+Ph4lzrataoTEHTSgoN+feLEiULj0w4fPuw8DgAA4O+8Ft6GDh1qnletWuVS/vvf/94EtocffliqVq0qUVFRsn79erl27Zqzzrp168yYuSFDhjjLBg8eLDk5ObJy5UpnmXajrl692uy0EBkZ6a1bAQAAKDW8NuZNd1X453/+Z/mP//gPM+u0Z8+eZrbp5s2bZebMmc5uTl0Hrlu3bua4ruGm49JiY2PN4rx9+/Z1nk8DmoY5fW1qaqo0btxY1q5dK6dOnSoUEAEAAPyVV7fHWr58uTRo0MC0jn3yySfyi1/8Qt5++22zvZVD+/btzZpwumfpSy+9JFWqVHEuLVLQBx98YLbZ0pY5HTPXpk0biYuLkx49enjzNgAAAMpGeCtfvrzMmTPHPIqj+5IeOHDglufTZUF0eyx9AAAAlEVeG/MGAACAu4/wBgAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAGARwhsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWITwBgAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAGARwhsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWITwBgAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAGARwhsAAIBFCG8AAAAWIbwBAABYhPAGAABgEcIbAACARcr5+gJQ+pw5c0YuXrwotktISPD1JQAAcNcR3lAouDVr3kIyM27wzgAAUAoR3uBCW9w0uNUYMFXK14i0+t3J+DFeftq33teXAQCAveFt3rx58uqrr0rLli3lL3/5i8uxgwcPyssvvyx//vOfJSwsTIYOHSrz58+XypUru9TLysqS119/XdatWydXrlyRNm3ayJtvvil9+vS5l7fi9zS4BddtLDbLvpTo60sAAMDeCQtJSUkmjFWqVKnQsWPHjknv3r3lxo0bsmTJEhkzZoysXLlShgwZUqjuyJEjTZ1nn31W3n33XQkKCpJ+/frJ/v3779GdAAAAlIGWt2nTpsk//uM/Sk5OTqHB8LNmzZJq1arJnj17TKubatiwoYwdO1a+/PJLeeSRR0zZkSNHZOPGjbJo0SJzPjVixAhp1aqVabXT1jsAAPyBv0y6qlmzpjRo0MDXl+FX7kl4+9Of/iRbtmyRo0ePysSJE12OpaWlyY4dO+Sll15yBjdHKNOyTZs2OcObnkNb2saNG+esFxISIqNHjzYBMDExUSIj7R6nBQAo23LSr4gEBEh0dLT4g5DQivL9dwkEOJvCm7a0aWDTrtDWrVsXOn78+HH5+eefpWPHji7lFSpUkHbt2pnA56BfN23a1CXkqc6dOzu7X4sKbykpKVK/fn23x2JiYswDAABfy81KF8nL84uJYzr2+FJcrOlxo/Xt/9OhX/ooKquUivC2fPlyOX36tOzcubPYCw0PDy90TMv27dvnUreoeurs2bNFXkdubq4kJye7PaatfwAAlCb+MHEM7jNHUXnEU14Nb5cuXTIzQ1977TWpVauW2zoZGRnmOTg4uNAx7RJ1HHfULape/nO5ExgY6Db4qYIteQAAAN6gmSMiIsLtMW2k0sYmn4Y3XRakevXqhca55RcaGupcAqSgzMxM53FH3aLq5T+XOxrcdMYrAACArxQ3VEuHd3nSKue18Hby5Emz3Mc777zj0p2pQSs7O1tOnTpl0qejNcxdP6+W1atXz/m91nV3U47X5q8LAADgj7y2zpuGLG36mzRpkjRq1Mj5OHz4sJw4ccJ8PXfuXLPMR7ly5SQ+Pt7l9Tdv3jQTEHTSgoN+ra8tOEZNz+k4DgAA4M+8Ft40lH3yySeFHrq7gs440a91iY+qVatKVFSUrF+/Xq5du+Z8ve6gkJ6e7rJQ7+DBg83sVW3Rc9Bu1NWrV0uXLl1YJgQAAPi9ct5clO/JJ58sVK7dqCr/Md02q1u3btKzZ0+zhpuOTYuNjTXru/Xt29dZTwOahrmZM2dKamqqNG7cWNauXWu6YFetWuWtWwEAACh722MVp3379mYpEZ1woAvzasuatsrporwFffDBBzJlyhTTMqddsjp+Li4uTnr06OGTawcAAPDbjemVboHlTvfu3eXAgQO3fL0uC6LbY+kDAACgrCkVLW8AAADwDOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIl4Lb19//bW8+OKL0rJlS6lUqZI0aNBAhg4dKidOnChUNyEhQfr27SuVK1eW6tWry3PPPScXLlwoVC83N1feeustadSokYSEhEibNm1kw4YN3roFAACAUqect068cOFCOXDggAwZMsSErHPnzsnSpUulffv28tVXX0mrVq1MvaSkJOnRo4dUrVpV5s+fL+np6bJ48WI5fvy4HDlyRCpUqOA85+zZs2XBggUyduxY6dSpk2zdulWGDx8uAQEBMmzYMG/dCgAAgP+Ht5iYGPnDH/7gEr6efvppad26tQlg69evN2Ua2K5fvy7ffPONaZ1TnTt3lj59+siaNWtk3Lhxpiw5OVliY2NlwoQJJgSqMWPGSM+ePWX69OkmJAYFBXnrdgAAAPy727Rbt24uwU01adLEdKNqN6nDRx99JAMGDHAGNxUVFSVNmzaVTZs2Ocu0lS07O1teeOEFZ5m2uI0fP9603h06dMhbtwIAAFA2Jyzk5eXJ+fPnpWbNms7WtNTUVOnYsWOhutr6dvToUef3+rWOnWvRokWheo7jxUlJSZH69eu7fSxZsuQu3SEAAEDRNHMUlUc0q/i029SdDz/80AS2uXPnmu8dFxkeHl6orpZdvnxZsrKyJDg42NStU6eOaW0rWE+dPXu22J+tkx30Z7uTlpZ22/cEAADgKc0cReURT92z8Pbdd9+Z8Wpdu3aV559/3pRlZGSYZw1nBelsUkcdPe54Lq5ecQIDA92GRBUWFiZ36syZM3Lx4kWxXf4ubQAAcHdp5oiIiHB7TBuqtLGpVIQ3nWnav39/M6N0y5YtzokFoaGh5llb1wrKzMx0qaPPntQrigY3HRvnDRrcmjVvIZkZN7xyfgAA4B9iYmLMwx3tOvWkVc7r4e2nn36Sxx57TK5evSr79u2TevXqOY85WsLc9fFqma755mht07q7d+824+byd506Xpv/vPeatrhpcKsxYKqUrxEpNsv4MV5+2vf/ZwIDAIDSx6vhTVvFHn/8cbMw786dO+WBBx5wOa7NhrVq1ZL4+PhCr9U13tq1a+f8Xr/+/e9/b7r18p/n8OHDzuO+psEtuG5jsVn2pURfXwIAAPDFbNOcnByzrpsu4bF582Yz1s2dQYMGSVxcnCQm/l9o2LVrlwl8unabw8CBA6V8+fKybNkyZ5m2wi1fvtyEQF2aBAAAwN95reVt6tSpsm3bNtPyprNGHYvyOkRHR5vnWbNmmXDXq1cvmTx5stlhYdGiRWYx31GjRrn0A0+ZMsUc0/XedIeFTz/91HTF6ixWFugFAABlgdfC27Fjx8zz9u3bzaMgR3iLjIyUvXv3msF7M2bMMAv76uQG3U2h4OxS3ZmhWrVqsmLFCrP7gi76q6FQt8gCAAClk7+sZFCzZk2XTQX8Lrzt2bPH47q668IXX3xxy3q63MfMmTPNAwAAlG456Vd0OyRng43tQkIryvffJfg8wN3TRXoBAEDZkZuVrgPU/WI1huxLiXIpLtasMEF4AwAAfs0fVmMos3ubAgAA4M4Q3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAixDeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAACLEN4AAAAsQngDAACwCOENAADAIoQ3AAAAi5STMmrJkiWSlpYmYWFhEhMT4+vLgQfSjnwiuTdvSGCFihLW+Ve8ZxbgM7MPn5l9+MzKXgYp0+EtOTlZIiIiCG+WSPv6U8lJvyRBlWsQ3izBZ2YfPjP78JmVvQxCtykAAIBFrAtvWVlZ8sorr0i9evUkNDRUunTpIjt27PD1ZQEAANwT1oW3kSNHmubGZ599Vt59910JCgqSfv36yf79+319aQAAAF5n1Zi3I0eOyMaNG2XRokUybdo0UzZixAhp1aqVvPzyy3Lw4EFfXyIAAIBXWdXytmXLFtPSNm7cOGdZSEiIjB49Wg4dOiSJiYk+vT4AAABvC8jLy8sTS/Tp08fMzvj2229dynft2iVRUVGybds2efzxx12OVahQQbKzs83XgYH/l1Vzc3OdX1etWlUqV65829el509NTZXAkMoigUFis7yfsyVPl+MohfeSm5Emon9cAwIkMDTM6nspCZvvo+BnZvO9FOQv91LwPkr696w08dfP5FZK82fmL5+JkZsjuZnpUrt2bSlfvrzcrvT0dPnpp5+c37vLJnr+mzdv+ke3aUpKioSHhxcqd5SdPXu20LGcnBy3gS0/fRPzv5G3Sz9Uf1Gq7yUvT3Jv/OQf91ICVt9Hgc/M6nspwF/updB9lPDvWWnit5/JrZTiz8xfPhOljTV3k7tskj+7WB/eMjIyJDg4uFC5dp06jrs7puXawJg/3eZXpUqVO2p5AwAA8LTl7dq1a0UGuYCAAGeu8YvwpkuD6FIhBWVmZjqPF3T9+vV7cm0AAAD3glUTFrR7VLtOC3KU6dpvAAAA/syq8NauXTs5ceKE2Q8sv8OHDzuPAwAA+DOrwtvgwYPNIL6VK1c6y7QbdfXq1WanhcjISJ9eHwAAgLdZNeZNA9qQIUNk5syZZrZH48aNZe3atXLq1ClZtWqVry8PAADA66xqeVMffPCBTJkyRdatWyeTJk0ya6zFxcVJjx49PHo9e6PaOTNnzpw50rdvX6levbqZibNmzRpfXxaK8PXXX8uLL74oLVu2lEqVKkmDBg1k6NChZsgDSqe//vWv5hfj++67TypWrCg1a9Y0/6Zu377d15cGD82bN8/826g7DqF02rNnj/mM3D2++uor/215Uzp9VrfH0sft7o2qOzVoAGzSpIkJAbo36u7du6V79+53/Xpx5y5evChz5841IaBt27bmLwBKr4ULF8qBAwdMGGjTpo2cO3dOli5dKu3btzf/QPGfS+lz+vRps3TB888/byZ+3bhxQz766CN54oknZMWKFS672qD0SUpKkvnz55tfllD6acNTp06dXMq0J9Fvd1i4G3ujatdr/r1RdZkR/c9EV0xmb9TSSVtLr1y5InXr1pX4+Hjzh17HOWoQR+mjf486duxodjdxOHnypLRu3dqMW12/fr1Prw+e0fHFHTp0MP9Gfvfdd7xtpdiwYcPkwoUL5jPTX3b/8pe/+PqS4IY2PPTq1Us2b95s/i0sU92md4K9Ue2kCzNrcIMdunXr5hLclLZyazdqQkKCz64LJaP7SOsksKtXr/LWlWJ/+tOfzP9t77zzjq8vBSWgLd0///yz3K4yFd6OHj0qTZs2lbAw173fOnfubJ6PHTvmoysD/Js28J8/f96MpULppYuaa8vNDz/8IG+//bZ8/vnn0rt3b19fFoqgLW0TJ06UMWPGmJZt2GHUqFEmh+gwMG2J0x6lkrJuzNu93hsVwJ378MMPJTk52YxdROk1depUM8ZN6XaCTz31lBmviNJp+fLlZrzizp07fX0p8ID2SAwaNMiMs9dfZL/99ltZvHixPPTQQ2a4yYMPPiieKlPh7Xb2RgVwZ3S81IQJE6Rr165mQDxKL53IpWNx9BfZTZs2mZadmzdv+vqy4MalS5fk9ddfl9dee01q1arFe2TJkBJ9OOiEIP37phO7dAm0//qv//L4XGWq2/R29kYFcPt0pmn//v2latWqzjGnKL2aN28uUVFRMmLECLMEky7T8/jjj5tub5Qur776qlk6SbtNYS+dZTpw4ECz4oX+suSpMhXe2BsVuHd++ukneeyxx8yAd/2Nkr2H7aOtArpuH2v0lS46e1t3GtIlJ7SVVBeq14c2ROjap/r15cuXfX2Z8JBODNIWbh1z6qkyFd7YGxW4N/Q/EW2x0f/0tQXngQce4K23kGMoiQZxlB46fjQ3N9eEt0aNGjkfus+3/p3Trxlfao8ff/zRDN+qXLmyx68pV9Z+i9TBgfobi2OdN/ZGBe4ubfp/+umn5dChQ7J161Yz1g2lm243qGtd5qctOLqjjQ4nIXyXLro26SeffOK2K1WXoHj33Xfl/vvv98m1oWi6Fl/B8Yn/8z//I9u2bTO9FDpJyFNlKryxN6q9dMabdr85ZgTrtj26qrjSMR86pgqlZ8ai/mOkLW/adVNwUd7o6GifXRvc+/Wvfy1paWlmS6yIiAgzVlFnCOtkk9jY2BK1CMD7dKbik08+Wajcsdabu2PwPf2lVn8Z0kkL+suSzjbVxiTdkm7BggUlOleZ2mHB0Z2js3P0PxRdtV9nebzxxhvy6KOP+vrSUIyGDRuaKfHu/P3vfzfHUTo8/PDDsnfv3iKPl7F/cqywceNGWbVqlRw/ftzMYqxSpYrZXUF/MdIZcbDn7x47LJRev/vd78wvRX/729/ML0vaCqfrKOre3WyPBQAA4MfK1IQFAAAA2xHeAAAALEJ4AwAAsAjhDQAAwCKENwAAAIsQ3gAAACxCeAMAALAI4Q0AAMAihDcAAODX0tPTzU4Gffv2lerVq0tAQICsWbPmnl/Hv/zLv5ifXfChG9OXRJna2xQAAJQ9Fy9elLlz50qDBg2kbdu2smfPHp9ez/vvv++yZ3BQUFCJXk94AwAAfi08PFxSUlKkbt26Eh8fL506dfLp9QwePFhq1qx526+n2xQAAPi14OBgE9w88fnnn8tDDz0klSpVkipVqkj//v3lr3/96129nry8PLM5vT7fDsIbAACAiKxbt86ENe3SXLhwobz22mvy7bffSvfu3eXUqVN37T267777pGrVqiYcRkdHy/nz50v0erpNAQBAmZeeni6TJk2SMWPGyMqVK53vx/PPPy/NmjWT+fPnu5TfjmrVqsmLL74oXbt2Na2B+/btk3/7t3+TI0eOmO7csLAwwhsAAIAnduzYIVevXpVnnnnGTHDIP5mgS5cusnv3bmdZTk6OZGdne3Te/DNJJ0+e7HJs0KBB0rlzZ3n22Wdl2bJlMmPGDI/OSbcpAAAo806ePGneg1/+8pdSq1Ytl8eXX34pqampLt2roaGhHj0yMzOLfW+HDx9uxuPt3LnT48+AblMAAFDm5ebmOoOZu8kN5cr9X2TSMXCrV6/26D0rX778LetERkbK5cuXPf4MCG8AAKDMu//++817ULt2bYmKiir2/WjcuLF53A0641QnQzz44IMev4ZuUwAAUOY9+uijZsKATkxwN57twoULd/weuTuHLtir5br7g6doeQMAAH5v6dKlZkLC2bNnzffbt2+XpKQk8/XEiRPN0h0apJ577jlp3769DBs2zIx3O3PmjHz22WfyT//0T+Ycd+IXv/iFPP3009K6dWszkWH//v2yceNGadeunfz617/2+DwBebe7QhwAAIAlGjZsKKdPn3Z77O9//7s5rnTrrAULFshXX30lWVlZEhERYRbt1SU+OnTocEfXMHbsWDl48KAkJiaaiQwa5nTG6ezZs82ab54ivAEAAFiEMW8AAAAWIbwBAABYhPAGAABgEcIbAACARQhvAAAAFiG8AQAAWITwBgAAYBHCGwAAgEUIbwAAABYhvAEAAFiE8AYAAGARwhsAAIDY4/8BCe2Jdw/Rge0AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "f = op.models.geometry.pore_size.normal\n",
    "pn.add_model(propname='pore.diameter',\n",
    "             model=f,\n",
    "             scale=1e-5,\n",
    "             loc=2.5e-5,\n",
    "             seeds='pore.seed')\n",
    "plt.hist(pn['pore.diameter'], edgecolor='k');"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7232364",
   "metadata": {},
   "source": [
    "And similarly we fetch a model for the throat sizes as well:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "0a2adc8e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "f = op.models.geometry.throat_size.normal\n",
    "pn.add_model(propname='throat.diameter',\n",
    "             model=f,\n",
    "             scale=1e-5,\n",
    "             loc=2.5e-5)\n",
    "plt.hist(pn['pore.diameter'], edgecolor='k', density=True, alpha=0.5)\n",
    "plt.hist(pn['throat.diameter'], edgecolor='k', density=True, alpha=0.5);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "27579da1",
   "metadata": {},
   "source": [
    "Now that we have pore and throat sizes, we can compute their volumes (and other properties). The volume will depend on the shape of the pores and throats.  In OpenPNM we do not explicitly track such *shapes*.  Instead we offer several models that calculate the property of interest for a given shape. This is illustrated below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "01d0e7e7",
   "metadata": {},
   "outputs": [],
   "source": [
    "f = op.models.geometry.throat_length.spheres_and_cylinders\n",
    "pn.add_model(propname='throat.length',\n",
    "             model=f)\n",
    "f1 = op.models.geometry.pore_volume.sphere\n",
    "pn.add_model(propname='pore.volume',\n",
    "             model=f1)\n",
    "f2 = op.models.geometry.throat_volume.cylinder\n",
    "pn.add_model(propname='throat.volume',\n",
    "             model=f2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f9628d8c",
   "metadata": {},
   "source": [
    "```{warning} **Spherical pores overlap with their throats**\n",
    "\n",
    "  A spherical pore will always have a region of overlap with its connected throats. The volume of this region will be double counted if an extra step is not taken. \n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "94e06d54",
   "metadata": {},
   "outputs": [],
   "source": [
    "f = op.models.geometry.throat_length.spheres_and_cylinders\n",
    "pn.add_model(propname='throat.length',\n",
    "             model=f)\n",
    "f1 = op.models.geometry.pore_volume.sphere\n",
    "pn.add_model(propname='pore.volume',\n",
    "             model=f1)\n",
    "f2 = op.models.geometry.throat_volume.cylinder\n",
    "pn.add_model(propname='throat.total_volume',\n",
    "             model=f2)\n",
    "f3 = op.models.geometry.throat_volume.lens\n",
    "pn.add_model(propname='throat.lens_volume',\n",
    "             model=f3)\n",
    "f4 = op.models.misc.difference\n",
    "pn.add_model(propname='throat.volume',\n",
    "             model=f4,\n",
    "             props=['throat.total_volume', 'throat.lens_volume'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "36d6d236",
   "metadata": {},
   "source": [
    "We can inspect some of these values to make sure they are making sense:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "682f95fd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Volumes of full throats: [2.27203214e-14 2.58686910e-14 2.44028684e-14]\n",
      "Volumes of lenses: [6.92245838e-15 8.40091924e-15 7.59556144e-15]\n",
      "Actual throat volumes: [1.57978631e-14 1.74677718e-14 1.68073070e-14]\n"
     ]
    }
   ],
   "source": [
    "print(\"Volumes of full throats:\", pn['throat.total_volume'][:3])\n",
    "print(\"Volumes of lenses:\", pn['throat.lens_volume'][:3])\n",
    "print(\"Actual throat volumes:\", pn['throat.volume'][:3])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "21dda2c5",
   "metadata": {},
   "source": [
    "## Using Predefined Collections of Models\n",
    "\n",
    "The process of selecting all the correct models from the `models` library can be tedious and error prone. In OpenPNM V3 we have introduced the concept of model *collections*, which are predefined dictionaries of models that form a complete and correct geometry. For instance, there is a collection called `spheres_and_cylinders`, which contains all the needed models to describe this geometry.  \n",
    "\n",
    "These collections are found under `openpnm.models.collections`, and their use is outlined below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "8ff9e8b6",
   "metadata": {},
   "outputs": [],
   "source": [
    "pn = op.network.Cubic(shape=[20, 20, 20], spacing=5e-5)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bdb85f3e",
   "metadata": {},
   "source": [
    "The models *collection* is fetched as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "0260c363",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'pore.diameter': {'model': <function product at 0x116fe3ce0>,\n",
      "                   'props': ['pore.max_size', 'pore.seed']},\n",
      " 'pore.max_size': {'iters': 10,\n",
      "                   'model': <function largest_sphere at 0x1193f76a0>},\n",
      " 'pore.seed': {'element': 'pore',\n",
      "               'model': <function random at 0x116fe3240>,\n",
      "               'num_range': [0.2, 0.7],\n",
      "               'seed': None},\n",
      " 'pore.volume': {'model': <function sphere at 0x1193f7ce0>,\n",
      "                 'pore_diameter': 'pore.diameter'},\n",
      " 'throat.cross_sectional_area': {'model': <function cylinder at 0x1193fcf40>,\n",
      "                                 'throat_diameter': 'throat.diameter'},\n",
      " 'throat.diameter': {'factor': 0.5,\n",
      "                     'model': <function scaled at 0x116fe3d80>,\n",
      "                     'prop': 'throat.max_size'},\n",
      " 'throat.diffusive_size_factors': {'model': <function spheres_and_cylinders at 0x1193ffe20>,\n",
      "                                   'pore_diameter': 'pore.diameter',\n",
      "                                   'throat_diameter': 'throat.diameter'},\n",
      " 'throat.hydraulic_size_factors': {'model': <function spheres_and_cylinders at 0x1194367a0>,\n",
      "                                   'pore_diameter': 'pore.diameter',\n",
      "                                   'throat_diameter': 'throat.diameter'},\n",
      " 'throat.length': {'model': <function spheres_and_cylinders at 0x1193fdbc0>,\n",
      "                   'pore_diameter': 'pore.diameter',\n",
      "                   'throat_diameter': 'throat.diameter'},\n",
      " 'throat.lens_volume': {'model': <function lens at 0x1193ff1a0>,\n",
      "                        'pore_diameter': 'pore.diameter',\n",
      "                        'throat_diameter': 'throat.diameter'},\n",
      " 'throat.max_size': {'mode': 'min',\n",
      "                     'model': <function from_neighbor_pores at 0x116ff8040>,\n",
      "                     'prop': 'pore.diameter'},\n",
      " 'throat.total_volume': {'model': <function cylinder at 0x1193fef20>,\n",
      "                         'throat_diameter': 'throat.diameter',\n",
      "                         'throat_length': 'throat.length'},\n",
      " 'throat.volume': {'model': <function difference at 0x116fe3920>,\n",
      "                   'props': ['throat.total_volume', 'throat.lens_volume']}}\n"
     ]
    }
   ],
   "source": [
    "from pprint import pprint\n",
    "mods = op.models.collections.geometry.spheres_and_cylinders\n",
    "pprint(mods)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "505c0189",
   "metadata": {},
   "source": [
    "The print-out of the dictionary is not very nice, but it can be seen that the keys are the model names, and the values are the model itself and the various arguments for the model.  This dictionary can be added to the network using the `add_models_collection` method as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "3756bc09",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "══════════════════════════════════════════════════════════════════════════════\n",
      "net : <openpnm.network.Cubic at 0x119694870>\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n",
      "  #  Properties                                                   Valid Values\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n",
      "  2  pore.coords                                                   8000 / 8000\n",
      "  3  throat.conns                                                22800 / 22800\n",
      "  4  pore.coordination_number                                      8000 / 8000\n",
      "  5  pore.max_size                                                 8000 / 8000\n",
      "  6  throat.spacing                                              22800 / 22800\n",
      "  7  pore.seed                                                     8000 / 8000\n",
      "  8  pore.diameter                                                 8000 / 8000\n",
      "  9  throat.max_size                                             22800 / 22800\n",
      " 10  throat.diameter                                             22800 / 22800\n",
      " 11  throat.cross_sectional_area                                 22800 / 22800\n",
      " 12  throat.hydraulic_size_factors                               22800 / 22800\n",
      " 13  throat.diffusive_size_factors                               22800 / 22800\n",
      " 14  throat.lens_volume                                          22800 / 22800\n",
      " 15  throat.length                                               22800 / 22800\n",
      " 16  throat.total_volume                                         22800 / 22800\n",
      " 17  throat.volume                                               22800 / 22800\n",
      " 18  pore.volume                                                   8000 / 8000\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n",
      "  #  Labels                                                 Assigned Locations\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n",
      "  2  pore.xmin                                                             400\n",
      "  3  pore.xmax                                                             400\n",
      "  4  pore.ymin                                                             400\n",
      "  5  pore.ymax                                                             400\n",
      "  6  pore.zmin                                                             400\n",
      "  7  pore.zmax                                                             400\n",
      "  8  pore.surface                                                         2168\n",
      "  9  throat.surface                                                       4332\n",
      " 10  pore.left                                                             400\n",
      " 11  pore.right                                                            400\n",
      " 12  pore.front                                                            400\n",
      " 13  pore.back                                                             400\n",
      " 14  pore.bottom                                                           400\n",
      " 15  pore.top                                                              400\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n"
     ]
    }
   ],
   "source": [
    "pn.add_model_collection(mods)\n",
    "pn.regenerate_models()\n",
    "print(pn)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6814eb17",
   "metadata": {},
   "source": [
    "## Customizing Models by Overwriting Them or Their Arguments\n",
    "\n",
    "The pre-written models and collections included with OpenPNM are helpful, but you'll almost always want to adjust some of the models to suit a specific application. This can be done by either altering the arguments of existing models, or by overwriting them all together. \n",
    "\n",
    "Let's first look at replacing a model with one of our choice.  The `spheres_and_cylinders` collection uses a random distribution of pore sizes, bounded between 0 and the distance to the nearest neighbor. This can be inspected by printing the specific model as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "24933005",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n",
      "Property Name             Parameter                 Value\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n",
      "pore.diameter             model:                    product\n",
      "                          props:                    ['pore.max_size', 'pore.seed']\n",
      "                          regeneration mode:        deferred\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n"
     ]
    }
   ],
   "source": [
    "print(pn.models['pore.diameter@all'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "99103ed9",
   "metadata": {},
   "source": [
    "```{note} **The @ Notation**\n",
    "\n",
    "  The `'@all'` that has been added to the model name is new in Version 3 and means that this model should be applied to pore that have the label `'pore.dall'`. This will be explained in detail in the next tutorial. \n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "29bf7355",
   "metadata": {},
   "source": [
    "Let's replace this with a normal distribution. This can be done with the `add_model` method as before. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "e68addce",
   "metadata": {},
   "outputs": [],
   "source": [
    "f = op.models.geometry.pore_size.normal\n",
    "pn.add_model(propname='pore.diameter',\n",
    "             model=f,\n",
    "             scale=1e-5,\n",
    "             loc=2.5e-5,\n",
    "             seeds='pore.seed')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "327e87a3",
   "metadata": {},
   "source": [
    "Now print the model again to ensure it was updated:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "e687fdd7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n",
      "Property Name             Parameter                 Value\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n",
      "pore.diameter             model:                    normal\n",
      "                          scale:                    1e-05\n",
      "                          loc:                      2.5e-05\n",
      "                          seeds:                    pore.seed\n",
      "                          regeneration mode:        normal\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n"
     ]
    }
   ],
   "source": [
    "print(pn.models['pore.diameter@all'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "03b97a60",
   "metadata": {},
   "source": [
    "And let's inspect the values:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "abf73f2b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm8AAAHPCAYAAAAFwj37AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAKolJREFUeJzt3QmUVNWBP/7LvimETdldBreIBhExOoomokPcR3EnalR0nFFU3HEcJyRuo+gk47idMaiQSJSMUTEa0ZEM4oIYneNEFMeorILggsgiQv3Pvb90/ekF6AXsvtWfzzl1uvq9V9WvblW//vZdmxQKhUIAACALTev7BAAAqD7hDQAgI8IbAEBGhDcAgIwIbwAAGRHeAAAyIrwBAGSkechQu3btwqpVq0KzZs3CNttsU9+nAwBQZ4sXLw5r164NrVu3Dl9++eUGj2uS4yS9MbStW7euvk8DAGCza9q0aQpxJVXzVhbe4ovr3r17WLhwYbnv2TjlVX3KqmaUl7LaUny2lFVj+Gwt/Mu5xJyzMVmGt9hUOn/+/FTI8+bNC7169Sr3PRunvKpPWdWM8lJWW4rPlrJqDJ+tXn85l011CTNgAQAgI8IbAEBGhDcAgIwIbwAAGRHeAAAykuVo04pGjRoVli1bFtq3b1/fp5IF5aWsfLbqn99D5eWz1TCMyjBDZDlJb9lQ2p49e9b7sF4AgG8y32g2BQDIiPAGAJAR4Q0AICPCGwBARoQ3AICMCG8AABkR3gAAMiK8AQBkpCRWWADYkubMmROWLFlSMoXcpUuX0KdPn/o+DaCWhDeATQS3XXbdLaxauaJkyql1m7bhnbdnCXCQKeENYCNijVsMbp2PvDS06Nw7+7Jas3RuWDp5bHpdat8gT8IbQDXE4NaqW19lBdQ7AxYAADIivAEAZER4AwDIiPAGAJAR4Q0AICPCGwBARkwVAmwRpbIqwaxZs+r7FADKEd6Aza4UVyUAaCiEN2CzK6VVCVb+eWb4fNqE+j4NgCLhDdhiSmFVgricFEBDYsACAEBGhDcAgIwIbwAAGRHeAAAyIrwBAGREeAMAyIjwBgCQEeENACAjwhsAQEaENwCAjAhvAAAZEd4AADIivAEAZER4AwDIiPAGAJCR5vV9AgBQW3PmzAlLliwpmQLs0qVL6NOnT32fBg2c8AZAtsFtl113C6tWrgilonWbtuGdt2cJcGyU8AZAlmKNWwxunY+8NLTo3Dvkbs3SuWHp5LHpdal9Y2OENwCyFoNbq2596/s04BtjwAIAQEbUvEEDUUodr2fNmlXfpwBQsoQ3aABKseM1AFuG8AYNQKl1vF7555nh82kT6vs0AEqS8AYNSKl0vI6j5gDYMgxYAADIiPAGAFDK4e3dd98NJ598cujVq1do27Zt2HXXXcOYMWPCihXlO1q/+OKL4YADDkjHdOvWLYwcOTIsX7680vOtXr06XHnllaFHjx6hTZs2Yd999w1Tpkyp26sCAChRNerzNnfu3DBo0KDQoUOHcMEFF4ROnTqFl156KVx33XXhtddeC4899lg67o033giHHHJI2G233cJtt90W5s2bF2699dYU/J566qlyz3nmmWeGSZMmhYsvvjjstNNO4f777w+HH354eP7551P4AwCgluFt/Pjx4bPPPgsvvPBC2H333dO2c889N6xbty48+OCD4dNPPw0dO3YMo0ePTl+nTp0a2rdvn47bfvvtw4gRI8IzzzwTDjvssLRtxowZYeLEieGWW24Jl112Wdp2+umnh379+oUrrrgi1d4BQGNSSvMkdunSxVJf9R3eli1blr5uu+225bZ37949NG3aNLRs2TIdE5s9L7nkkmJwKwtlcdvDDz9cDG+xxq1Zs2YpAJZp3bp1OPvss1MAjDV9vXvnP20CAGzK2uWfhtCkSRg+fHjJFFbrNm3DO2/PEuDqM7wdfPDB4eabb07h6sc//nHo3Llzqh276667Up+2du3ahenTp4evv/46DBw4sNxjY7Dr379/eP3114vb4v2dd965XMiLYtNsWfPrxsLbwoULU9+7qowaNSrdACAH61YvD6FQKJn5HuOUQUsnj03zWPbp06e+T6fBiN3J4m1DuWazh7ehQ4eGn/zkJ+GGG24Ijz/+eHH7NddcE37605+W+8GxNq6iuG3atGnlTnJDx0ULFizY6PnE5tr58+dvtJYQgNJsmiuF11DK8z0SNphPNpRdttgkvbHv2uDBg8Pxxx+fat6efPLJFObiiNI4iGHlypXpuFatWlV6bGwSLdsfxfsbOq5s/8bEptqqwl9UsTYPgNJsmoOcxHzSs2fPKvfFSq1YMbVZw1scXBD7p82ePbvYXHncccelHxSn+zjllFPSdB9lU4BUtGrVquL+KN7f0HFl+zcmBrc4khWAxtc0Zxk2crSxbl0xW1WnVq5G4e3OO+8Me+21V6V+ZkcffXSa4iP2YSurCauq3TZui/O5lYnHVnWSZY9d/1gANp9SaJqzDBuNVY0m6V20aFFYu3Ztpe1r1qxJX+NAhTjNR/PmzcPMmTPLHfPVV1+lAQhx0EKZeD/W4lXsn/bKK68U9wMAUMvwFkeGxtq1GLjW99BDD6X+Z3vuuWeawHfIkCFhwoQJ4Ysvvig3R1xcYeGEE04obhs2bFgKg/fee29xW2xGHTduXFppwTQhAAB1aDa9/PLL0woJBx54YBqcEAcsTJ48OW0755xzis2c119/fdh///3DQQcdlPrIxX5pY8eOTfO7xRGrZWJAi2Hu6quvDosXLw59+/YNDzzwQPjggw/CfffdV5NTAwBoFGpU8xZHmcZ53fbee+/U/y0uafXee++lsBbneiszYMCA8Oyzz6YBB3Fi3lizFueGi5PyVhRXZojPE2vm4lxxsQk2BsL4swAAqONUIXEC3d/97nebPC6uSxon7N2UOC1IXB4r3gAA2Iw1bwAA1C/hDQAgI8IbAEBGhDcAgIwIbwAApTzaFACgumbNmlUShdWlS5fQp0+f0BAIb2Rrzpw5YcmSJaEUlMrFDaDM2uWfhtCkSRg+fHhJFErrNm3DO2/PahABTngj2+C2y667hVUrV9T3qQBQhXWrl4dQKITOR14aWnTunXUZrVk6NyydPDZVGAhvUEvxFygGt1K4KEQr/zwzfD5tQn2fBsBmF6/Rrbr1VbKbkZo3slYqF4X4Xx0AVIfRpgAAGRHeAAAyIrwBAGREeAMAyIjwBgCQEeENACAjwhsAQEaENwCAjAhvAAAZEd4AADIivAEAZMTapo3MnDlz0qLuuZs1a1Z9nwIA1AvhrZEFt1123S2sWrmivk8FAKgl4a0RiTVuMbh1PvLS0KJz75CzlX+eGT6fNqG+TwMAvnHCWyMUg1urbn1DztYsnVvfpwAA9cKABQCAjAhvAAAZEd4AADIivAEAZER4AwDIiPAGAJAR4Q0AICPCGwBARoQ3AICMCG8AABkR3gAAMiK8AQBkxML0mzBnzpywZMmSUApmzZpV36cAANSR8LaJ4LbLrruFVStX1LWcAQA2C+FtI2KNWwxunY+8NLTo3DvkbuWfZ4bPp02o79MAAOpAeKuGGNxadesbcrdm6dz6PgUAoI4MWAAAyIjwBgCQEeENACAjwhsAQEaENwCAjAhvAAAZEd4AADIivAEAZER4AwDIiPAGAJAR4Q0AICPCGwBARoQ3AICMCG8AABkR3gAAMiK8AQBkRHgDAMiI8AYAkBHhDQAgI8IbAEBGhDcAgIwIbwAAGRHeAAAyIrwBAGREeAMAyIjwBgCQEeENACAjwhsAQEaENwCAUg9vf/zjH8PRRx8dOnXqFNq2bRv69esXfv7zn5c75sUXXwwHHHBA2t+tW7cwcuTIsHz58krPtXr16nDllVeGHj16hDZt2oR99903TJkypfavCACghDWv6QOeeeaZcNRRR4W99torXHvttWGrrbYK7733Xpg3b17xmDfeeCMccsghYbfddgu33XZb2nfrrbeGd999Nzz11FPlnu/MM88MkyZNChdffHHYaaedwv333x8OP/zw8Pzzz6fwBwBALcPbsmXLwumnnx6OOOKIFLiaNq264m706NGhY8eOYerUqaF9+/Zp2/bbbx9GjBiRwt9hhx2Wts2YMSNMnDgx3HLLLeGyyy5L2+Lzx5q8K664ItXeAQBQy2bTX/3qV2HRokXh+uuvT8Htyy+/DOvWrasU8GKz5/Dhw4vBrSyUxVq6hx9+uLgtBsBmzZqFc889t7itdevW4eyzzw4vvfRSmDt3bk1ODwCg5NUovD377LMpkM2fPz/ssssuKYzF788///ywatWqdMybb74Zvv766zBw4MByj23ZsmXo379/eP3114vb4v2dd965XMiLBg0aVGx+3ZiFCxeGXr16VXmLzbUAAA1JzCcbyi4x12z2ZtPYZy0Gs2OOOSbVjt14442pafTf/u3fwmeffRYeeuih4g/u3r17pcfHbdOmTSt+H4/d0HHRggULNno+sdYvBsmqxBpAAICGJOaTDWWX6qpReIujRVesWBH+7u/+rji69LjjjgtfffVVuOeee8KYMWPCypUr0/ZWrVpVenxsEi3bH8X7GzqubP/GxKbbqsJfVLE2DwCgvsV80rNnzyr3xUqtit3R6hze4lQe0SmnnFJu+6mnnprCW+ynFqcGKZsCpKLYtFr2HGXPt6Hj1v95GxKD2/qjXAEAGrJRo0alW1Vi02l1auVq1OctzsUWbbvttuW2b7PNNunrp59+WqwJq6rdNm4re44oHruh49b/eQAA1CK87b333ulrxVRY1jeta9euaZqP5s2b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s2bNwuGHHx5eeOGF+j41AIAGpd77vM2YMSNMnDgx3HLLLeGyyy5L204//fTQr1+/cMUVV4QXX3yxvk8RAKDBqPeat0mTJqWatnPPPbe4rXXr1uHss88OL730Upg7d269nh8AQEPSpFAoFOrzBA499NA0UvStt94qt/25554LQ4YMCY8//ng46qijyu1r2bJlWLNmTbrftGnTsG7duuK++H209dZbh622qtuIt/gzFi9e/P9GzjVtFnJX+HpNKHy1Ir7t8bsQmjQJTdu0Dzm/li393qxbuSyEwpYvq2/q9WxpxfL6y2cs99ezJd+bb+qzVSqftarKK9fXsiGb6/XU12erolzen3XVKa91a8O6VcvDNttsE1q0aFGnn7d8+fLwxRdfVP1j/pJn4s/46quvGm6z6cKFC0P37t0rbS/btmBB5fmi1q5dW7y/fnBb//vPP/883TaH+IaVlr/k9UIhTRmSs2/svfmGyqp0PmuFEns9W/C11NPvYbbvTRXlle1r2YDN9noayDU+m/ensOnyihU634T1c06DDG8rV64MrVq1qrQ9Np2W7a9qX9weKw3Latoq2hw1bwAAm9Omat6aNGlSzEANNrzFqUHiVCEVrVq1qri/oi+//PIbOTcAgIam3gcsxObR2HRaUdm2OPcbAAANJLz1798/zJ49O61Nur5XXnmluB8AgAYS3oYNG5Y65t17773FbbEZddy4cWmlhd69e9fr+QEANCT13uctBrQTTjghXH311WkUR9++fcMDDzwQPvjgg3DffffV9+kBADQo9V7zFj344IPh4osvDuPHjw8jR45M86tNnjw5DBgwIFx33XVh6NChoVOnTmkExv3331+j53722WfD97///dChQ4c0AnXvvfcOv/71r0Mpjl6pS1m99tpr4cgjjwzdunVLo3T33HPP8POf/3yTw5Vz9Oqrr4YLLrgg7L777qFdu3ahT58+4cQTT0zN99Xx2WefpUmlu3btmh7/ve99L/zxj38Mpaou5RXnazzrrLPCzjvvHNq2bRt23HHHcM4551TZz7UU1PWztb4RI0ak3+P4e1mqNkd5NZZr/OYor8Z0nf/Tn/6UKobiNSdee7p06RIGDx4cnnjiiZK4ztf7JL0bE2vfdthhh/QBjW/A1KlTU3NqXAu1OuKxcaWGOBHw0UcfnVZyeOedd0LPnj2LS3GVirqU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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(pn['pore.diameter'], edgecolor='k');"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4635252e",
   "metadata": {},
   "source": [
    "This distribution is quite truncated, due to the `'pore.seed'` values that were used.  Let's reach into that model and change this.  First print the model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "d5e4fac7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n",
      "Property Name             Parameter                 Value\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n",
      "pore.seed                 model:                    random\n",
      "                          element:                  pore\n",
      "                          num_range:                [0.2, 0.7]\n",
      "                          seed:                     None\n",
      "                          regeneration mode:        deferred\n",
      "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\n"
     ]
    }
   ],
   "source": [
    "print(pn.models['pore.seed@all'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d70dd11",
   "metadata": {},
   "source": [
    "We can see that the `num_range` argument is quite constrained, so let's change it. Each model is itself a dictionary, so we can overwrite as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "e316f20c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pn.models['pore.seed@all']['num_range'] = [0.01, 0.99]\n",
    "pn.regenerate_models()\n",
    "plt.hist(pn['pore.diameter'], edgecolor='k');"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e880f2ee",
   "metadata": {},
   "source": [
    "## Introduction to the Dependency Handler\n",
    "\n",
    "Pore-scale models clearly make life easier since you don't have to produce the complex numpy functions by hand each time, but this is not even their best feature! The main benefit of pore-scale models is that they can be *recomputed* automatically. For instance, if we re-run the `'pore.seed'` model, then all the other models that depend on `'pore.seed'` will automatically be recomputed as well. This all occurs when we call `regenerate_models`, as demonstrated below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "07e6f7fe",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.15319619 0.0328116  0.2287953  ... 0.23887453 0.8411705  0.10988224]\n",
      "[6.59011212e-06 6.59011212e-06 1.75717988e-05 ... 1.13561876e-05\n",
      " 2.66940036e-05 1.27284536e-05]\n"
     ]
    }
   ],
   "source": [
    "pn = op.network.Cubic(shape=[20, 20, 20], spacing=5e-5)\n",
    "pn.add_model(propname='pore.seed',\n",
    "             model=op.models.geometry.pore_seed.random)\n",
    "pn.add_model(propname='pore.diameter',\n",
    "             model=f,\n",
    "             scale=1e-5,\n",
    "             loc=2.5e-5,\n",
    "             seeds='pore.seed')\n",
    "pn.add_model(propname='throat.seed',\n",
    "             model=op.models.geometry.throat_seed.from_neighbor_pores,\n",
    "             prop='pore.seed')\n",
    "pn.add_model(propname='throat.diameter',\n",
    "             model=f,\n",
    "             scale=1e-5,\n",
    "             loc=2.5e-5,\n",
    "             seeds='throat.seed')\n",
    "print(pn['pore.seed'])\n",
    "print(pn['throat.diameter'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "95915c96",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.36618201 0.35063831 0.40236746 ... 0.58822388 0.42461491 0.9016327 ]\n",
      "[2.11640227e-05 2.11640227e-05 2.20171387e-05 ... 2.57748463e-05\n",
      " 2.30989878e-05 3.79091080e-05]\n"
     ]
    }
   ],
   "source": [
    "pn.regenerate_models()\n",
    "print(pn['pore.seed'])\n",
    "print(pn['throat.diameter'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ed8615a",
   "metadata": {},
   "source": [
    "As we can see above the initial values of `'pore.seed'` and `'throat.diameter'` are both changed after calling `regenerate_models()`. OpenPNM does this automatically by inspecting the arguments to each function. \n",
    "\n",
    "Inspecting the `add_model` calls above we can see:\n",
    "\n",
    "1. The `'throat.seed'` model takes `'pore.seed'` as an argument\n",
    "2. The `'throat.diameter'` model takes `'throat.seed'` as an argument\n",
    "3. The `'pore.diameter'` models takes `'pore.seed'` as an argument\n",
    "\n",
    "So when `regenerate_models` is called it first re-runs the `'pore.seed'` model, which has no dependencies, then it re-runs the `'throat.seed'` model, then `'throat.diameter'`, in that order based on their dependencies. It also calls `'pore.diameter'`, but no other models depend on this. The dependency handling is done by creating a graph or network using `networkx` then do a special sort to find the top of the tree and all the downstream dependencies.  This can be roughly visualized using:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "4080b43e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pn.models.dependency_map(style='planar');"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c641bb09",
   "metadata": {},
   "source": [
    "The green circles are pore properties and the orange squares are throat properties. We can also see that there are two models which are not dependent on anything else: `'throat.spacing'` and `'pore.coordination_number'`.  These are added to all networks during generation but not run, hence their values do no show up when doing `print(pn)`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bcc3cfce",
   "metadata": {},
   "source": [
    "It is also possible to make your own plot if you wish, by retrieving the dependency graph then calling the `networkx` plotting function of your choice:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "fde9676e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import networkx as nx\n",
    "g = pn.models.dependency_graph()\n",
    "fig, ax = plt.subplots(figsize=[5, 5])\n",
    "nx.draw_networkx\n",
    "nx.draw_planar(g, labels={k: k for k, v in g.nodes.items()}, ax=ax)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "openpnm",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
